With this code :
public class TestJDBC {
private static Timer timer;
private static Connection connDB; private static PreparedStatement sQLStatement;
public static void main(String[] args) throws SQLException, ClassNotFoundException {
connexion("jdbc:postgresql://praslin.qual.dc1:5432/G01DPM", "postgres8", "password"); timer = new Timer(); timer.schedule(new local_task(), 1000L, 1000); }
static class local_task extends TimerTask {
public void run() { ResultSet rs=null; try { sQLStatement.setInt(1, 2602); rs = sQLStatement.executeQuery(); sQLStatement.setInt(1, 2604); rs = sQLStatement.executeQuery(); sQLStatement.setInt(1, 2605); rs = sQLStatement.executeQuery(); } catch (SQLException e) { } finally{
try { if(rs!=null) rs.close(); } catch (SQLException e) { } rollBack(); } } }
public static void connexion(String chemin, String user, String password) throws SQLException, ClassNotFoundException { Class.forName("org.postgresql.Driver"); String url = chemin+"?user="+user+"&password="+password;
// Connexion connDB = DriverManager.getConnection(url); connDB.setAutoCommit(false); initPreparedStatement(); }
private static void initPreparedStatement() throws SQLException { sQLStatement = connDB.prepareStatement("select f_transite(?,'FPL','225',9,'test','','')"); }
public static void rollBack() { try { connDB.rollback(); } catch(SQLException ex) { } }
} In eclipse Helios profiler, Jdbc3ResultSet live instances increase (and never decrease). Same thing with org.postgresql.core.v3.QueryExecutorImpl$ErrorTrackingResultHandler and org.postgresql.core.v3.QueryExecutorImpl$1 classes.
f_transite stored procedure make some select, insert and update. If you need more explanation, i can give it to you.
Java 6
postgresql-9.0-801.jdbc3.jar
PostgreSQL 8.2.5 on powerpc-apple-darwin8.8.0, compiled by GCC powerpc-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5363)
Is it a memory leak ? Or my java code is wrong ?