我需要连续运行几个查询
Statement st = cnx.createStatement(); ResultSet rs = st.executeQuery( "SELECT [good stuff]"); // do something smart with rs rs = st.execute( "SELECT [better stuff]"); // do something smarter with rs rs = st.execute( "SELECT [best stuff]"); // you got it try{ rs.close();} catch( SQLException ignore){}; try{ st.close();} catch( SQLException ignore){};
这是前两个ResultSet未正确关闭的问题还是在垃圾回收期间隐式完成?
一旦执行第二个查询,上一个查询ResultSet就会自动关闭。就Garbage Collection您而言,您不必担心。最后,您可以仅stmt.close()此而已。它将自动关闭所有相关ResultSet对象。
ResultSet
Garbage Collection
stmt.close()
看一下:-ResultSet#close文档,其中说:-
ResultSet#close
当关闭,重新执行或用于从多个结果序列中检索下一个结果时,由该对象生成的Statement对象将自动关闭ResultSet对象。
如果要测试是否关闭结果集,则可以使用while循环result set在while循环内部和内部进行迭代,创建另一个查询并将其分配给相同的结果集。您将看到将引发异常。
result set
ResultSet res = stmt.executeQuery("SELECT * FROM sometable"); while (res.next()) { res.getString(1); // Closes the previous `ResultSet` res = stmt.executeQuery("SELECT * FROM othertable"); }
因此,在上面的代码中,在第二次迭代中,您将获得一个 Exception: - Cannot perform operation after ResultSet is closed
Exception: - Cannot perform operation after ResultSet is closed