From: thomas at tada.se (Thomas Hallgren) Date: Wed, 28 Jun 2006 15:42:15 +0200 Subject: [Pljava-dev] java.lang.OutOfMemoryError In-Reply-To: <44A28420.5010108@insa-toulouse.fr> References: <4492740D.4040302@insa-toulouse.fr> <4492BB01.5060205@tada.se> <44965774.7050203@insa-toulouse.fr> <44966070.4040806@tada.se> <44A134C6.5030003@insa-toulouse.fr> <44A13A99.60406@tada.se> <44A258BA.10605@insa-toulouse.fr> <44A25C49.6010907@tada.se> <44A27A46.6030407@insa-toulouse.fr> <44A27CD6.6090608@tada.se> <44A28420.5010108@insa-toulouse.fr> Message-ID: <44A28737.7090200@tada.se> Eric BOYER wrote: > Thomas Hallgren a ?crit : > >> Eric BOYER wrote: >> >> >>> just one thing >>> >>> We always use the fonction execute and never executeUpdate for our >>> operations ... >>> >>> >>> is it important ? >>> >>> >> It might be. If the query is producing a ResultSet (any 'SELECT ...' >> that is not a 'SELECT ... INTO' will do that) and you forget to close >> the statement, then you leave the ResultSet dangling. >> >> > We close all resultset ! Yes, provided you obtain it. What I meant to say was that the following code: stmt.execute("SELECT someFunction()"); will actually create a ResultSet. So unless it's followed by either: stmt.getResultSet().close(); or simply: stmt.close(), you will leave that set dangling. In fact, this code: stmt.execute("SELECT someFunction1()"); stmt.execute("SELECT someFunction2()"); will leak since there's no close in between. That's a bug in PL/Java, the execute should make sure that the statement is closed prior to executing (it does now). > The long treatment for the data insertion last about 30 heures ! > For 5000 inserts? That's about 20 seconds per account! I guess you're mostly waiting on the LDAP connection then? Regards, Thomas Hallgren