Re: Statement has been closed (only in Windows) - Mailing list pgsql-jdbc

From pedro farinha
Subject Re: Statement has been closed (only in Windows)
Date
Msg-id 1139281571.2693.66.camel@localhost.localdomain
Whole thread Raw
In response to Statement has been closed (only in Windows)  (Carlos Correia <carlos@m16e.com>)
Responses Re: Statement has been closed (only in Windows)
List pgsql-jdbc
Hi Carlos, if you're problem is solved what is the question?
if you worry about creating a lot of statements, don't. But make sure you close them after use. Also the resultSet if any. Not a big brain on this end, but why would you want to keep the statement open?

P.



On Sun, 2006-02-05 at 19:19, Carlos Correia wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

While testing a Java app (that's been working for years with PostgreSQL
+ Linux) in a Windows box I get this error when inserting a record
whithin a transaction:

org.postgresql.util.PSQLException: This statement has been closed.
~        at
org.postgresql.jdbc2.AbstractJdbc2Statement.checkClosed(AbstractJdbc2Statement.java:2390)
~        at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:329)
~        at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:278)

What I was doing was to keep a single connection since the beginning
until the end of the session.

public class DbConnection
{
~  Statement statement = null;

~  public Statement getStatement() throws SQLException
~  {
~  	if( statement == null )
~  		statement = con.createStatement();
~  	return statement;
~  }
}

As there was only one connection established with the database (fat
client), this seemed OK.

As the driver, when I ran the same app in Windos, was complaining that
the connection had been closed, I commented out the 'if' line above...
et voilá, problem solved.

New method:

~  public Statement getStatement() throws SQLException
~  {statement = con.createStatement();
~  	return statement;
~  }

As I don't like this solution (either trusting the garbage collector to
do his job or closing every statement after have been used), what I ask
is: what is the proper way of handling this kind of problem?

Testing conditions:

Linux:
- - Debian, Ubuntu, Gentoo, Fedora, etc.
- - PostgreSQL 7.4.x
- - pg74.216.jdbc3.jar

Windows:
- - Windows 2000, XP
- - PostgreSQL 8.1
- - postgresql-8.0-314.jdbc3.jar

Thanks,

Carlos
- --
MEMÓRIA PERSISTENTE, Lda.
Tel.: 219 291 591 - GSM:  967 511 762
e-mail: geral@m16e.com - URL: http://www.m16e.com
AIM: m16e - ICQ: 257488263 - Jabber: m16e@amessage.de
Skype.com username (VoIP): m16e.com
GnuPG: wwwkeys.eu.pgp.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFD5k/X90uzwjA1SJURAsG+AJ0RYQalem4sTxzyQd8Z/ucKsP4YLACdGyU9
LPA+ToH9kBrgxM3kE2V1Zxg=
=v2Qt
-----END PGP SIGNATURE-----

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
              http://archives.postgresql.org

pgsql-jdbc by date:

Previous
From: pedro farinha
Date:
Subject: Re: Bug Report
Next
From: Ralph Moser
Date:
Subject: Re: Bug Report