首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用ResultSet

重用ResultSet
EN

Stack Overflow用户
提问于 2012-10-16 04:02:39
回答 2查看 9.1K关注 0票数 4

我需要连续运行几个查询

代码语言:javascript
复制
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没有正确关闭的问题,还是在垃圾收集期间隐含地完成了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-16 04:04:08

一旦执行第二个查询,前一个ResultSet就会自动关闭。就Garbage Collection而言,您不必担心这一点。你可以在最后只有一个stmt.close(),仅此而已。它将自动关闭所有相关的ResultSet对象。

看一下:- ResultSet#close文档,上面写着:

关闭、重新执行或用于从多个结果序列中检索下一个结果时,ResultSet对象将由生成该对象的Statement对象自动关闭。

如果要测试结果集是否关闭,可以使用while循环遍历result set,并在while循环中创建另一个查询并将其分配给相同的结果集。您将看到将抛出一个异常。

代码语言:javascript
复制
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

票数 18
EN

Stack Overflow用户

发布于 2012-10-16 04:24:07

我不知道你的问题是什么,但是如果你在运行这段代码时遇到了问题,你可以尝试关闭连接并打开other来进行第二个查询。一些数据库产品,如SQLite,只允许一个打开的连接。如果你在数据库访问方面有任何问题,你应该尝试一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12903115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档