我需要连续运行几个查询
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没有正确关闭的问题,还是在垃圾收集期间隐含地完成了?
发布于 2012-10-16 04:04:08
一旦执行第二个查询,前一个ResultSet就会自动关闭。就Garbage Collection而言,您不必担心这一点。你可以在最后只有一个stmt.close(),仅此而已。它将自动关闭所有相关的ResultSet对象。
看一下:- ResultSet#close文档,上面写着:
关闭、重新执行或用于从多个结果序列中检索下一个结果时,ResultSet对象将由生成该对象的Statement对象自动关闭。
如果要测试结果集是否关闭,可以使用while循环遍历result set,并在while循环中创建另一个查询并将其分配给相同的结果集。您将看到将抛出一个异常。
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
发布于 2012-10-16 04:24:07
我不知道你的问题是什么,但是如果你在运行这段代码时遇到了问题,你可以尝试关闭连接并打开other来进行第二个查询。一些数据库产品,如SQLite,只允许一个打开的连接。如果你在数据库访问方面有任何问题,你应该尝试一下。
https://stackoverflow.com/questions/12903115
复制相似问题