[ http://issues.apache.org/jira/browse/DERBY-557?page=all ] Knut Anders Hatlen reopened DERBY-557: --------------------------------------
Reopening to add regression test. > Client driver gets OutOfMemoryError when re-executing statement without > closing ResultSet > ----------------------------------------------------------------------------------------- > > Key: DERBY-557 > URL: http://issues.apache.org/jira/browse/DERBY-557 > Project: Derby > Type: Bug > Components: Network Client > Versions: 10.1.1.0, 10.1.2.0, 10.2.0.0 > Reporter: Knut Anders Hatlen > Assignee: Knut Anders Hatlen > Priority: Minor > Fix For: 10.1.2.0, 10.2.0.0, 10.1.1.2 > Attachments: DERBY-557.diff, DERBY-557.stat, derbyall_report.txt > > When re-executing a statement without closing the old ResultSet, some of the > old ResultSet's resources are not released, and the network client will > eventually get an OutOfMemoryError. > Example: > Connection c = > DriverManager.getConnection("jdbc:derby://localhost/mydb"); > PreparedStatement ps = c.prepareStatement("select * from > sys.systables"); > while (true) { > ResultSet rs = ps.executeQuery(); > } > This code will run for some time and then throw an OutOfMemoryError. Same > thing happens with Statement instead of PreparedStatement. If rs.close() is > added in the loop, the code works. Explicitly closing the ResultSet should > not be necessary according to this quote from the JDBC 3.0 spec: > For Select statements, the statement is complete when the associated result > set is closed. The result set is closed as soon as one of the following > occurs: > - all of the rows have been retrieved > - the associated Statement object is re-executed > - another Statement object is executed on the same connection -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira