Thread: What happens to a ResultSet when statement closed
Consider the following code .... ResultSet r = statement.executeQuery(); statement.close(); connection.close(); What happens to the ResultSet r? What happens if I only close the statement, but continue to use the connection? -- Warren Little Senior Vice President Secondary Marketing Security Lending Wholesale, LC www.securitylending.com Tel: 866-369-7763 Fax: 866-849-8082
On Mon, 12 Jan 2004, Warren Little wrote: > Consider the following code > .... > ResultSet r = statement.executeQuery(); > statement.close(); > connection.close(); > > What happens to the ResultSet r? > What happens if I only close the statement, but continue to use > the connection? > Calling close on the Statement calls close on the ResultSet. That said calling close on the ResultSet only discards the reference to the data retrieved, so a number of methods can still be called on it even though it is closed (getFetchDirection is an example if a rather useless one.) This isn't strictly spec compliant, but it seems like a waste to add an isClosed check to every method. Calling close on a Connection does not close Statements and ResultSets that it produced although it should. Again these objects are largely useless without the connection and the theory is that things should fall out of scope and be garbage collected. This seems like a potentially more serious problem because you could have still have a reference to a very large ResultSet that was not closed which could take up a fair amount of memory. Kris Jurka
A ResultSet is tied to the statement. The result set is closed when the statement is. From the statement code: public void close() throws SQLException { // Force the ResultSet to close java.sql.ResultSet rs = getResultSet(); if (rs != null) rs.close(); deallocateQuery(); // Disasociate it from us (For Garbage Collection) result = null; } On Jan 12, 2004, at 5:11 PM, Warren Little wrote: > Consider the following code > .... > ResultSet r = statement.executeQuery(); > statement.close(); > connection.close(); > > What happens to the ResultSet r? > What happens if I only close the statement, but continue to use > the connection? > > -- > Warren Little > Senior Vice President > Secondary Marketing > Security Lending Wholesale, LC > www.securitylending.com > Tel: 866-369-7763 > Fax: 866-849-8082 > > ---------------------------(end of > broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faqs/FAQ.html > -------------------- Andrew Rawnsley President The Ravensfield Digital Resource Group, Ltd. (740) 587-0114 www.ravensfield.com