Karel Tejnora wrote:
Connection con=null; try { con = ...getConnection(); Stetement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(...); rs.close(); rs=null; stmt.close(); stmt=null; } finally { if(con!=null) { try { con.close(); } catch(SQLException e0) {} } }Je zase nejuvadenejsi priklad v Jbossu. Krom toho rs.close() rs=nullResulSet a Stement by mel uzavrit GC a connection by na ne nemela drzet referenci,
To myslim neni nikde garantovane, takovy PreparedStatement muze delat dost krkolomne veci, napridlad Oracle si PreparedStatementy jaksi cacheuje i mezi spojenimi, aby byly rychle pouzitelne i pri poolovani spojeni.
ale kdy k tomu dojde... rs.close() je uvolneni na DB (zavreni kursoru) a rs=null je signal pro GC.
Priklad z TomCatu je korektnejsi, protoze definuje promenne
pro ResultSet a Statement jeste pred try {}, aby je mohl
uzavrit v pripade vyjimky ve finally. Ten JBossovy prikladek
neuzavre Statement pokud executeQuery() vyhodi vyjimku.
Pokud by si Connection drzelo nejaky odkaz na Statement,
byl by to problem.
Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno Martin Kuba
Institute of Computer Science email: [EMAIL PROTECTED]
Masaryk University http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775
--------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
