【问题标题】:Java- creating multiple ResultSets out of same Statement object- will it have any effects?Java- 从同一个 Statement 对象中创建多个 ResultSet- 它会产生什么影响吗?
【发布时间】:2012-07-17 20:41:23
【问题描述】:

我从同一个 Statement 对象生成了 2 个 ResultSet

代码示例如下:

Connection con            = null;
Statement  stmt           = null;
ResultSet rs = null;

con = DBAccess.getConnection();
stmt = con.createStatement();

rs = stmt.executeQuery(Query1);
// operate on the resultset

rs = stmt.executeQuery(Query2);   // Is it legal and do not have side-effects?
// operate on the resultset

// close everythings (Resultset, Statement, Connection)

我检查它运行良好。我怀疑它会有任何副作用吗?

【问题讨论】:

    标签: java database jdbc resultset


    【解决方案1】:

    来自javadoc

    默认情况下,每个 Statement 对象只能打开一个 ResultSet 对象 同时。因此,如果读取一个 ResultSet 对象是 与另一个阅读交错,每个必须已经生成 通过不同的 Statement 对象。 Statement中的所有执行方法 接口隐式关闭语句的当前 ResultSet 对象,如果 打开一个存在。

    所以是的,您可以安全地进行操作。执行第二个查询后,您就无法使用第一个结果集。

    【讨论】:

      【解决方案2】:

      每个语句对象只有一个Resultset 对象。因此,当您执行另一个查询时,它会在内部关闭现有的结果集对象并打开一个新的结果集对象。但是你不能访问之前的结果集对象。

      不会有副作用。你可以随心所欲地使用它。

      【讨论】:

        【解决方案3】:

        请记住在使用相同的变量引用第二个结果集之前关闭第一个结果集。如果只在执行第二条语句后关闭结果集,则关闭第二个结果集,而不关闭第一个结果集。

        【讨论】:

        • 但在上面的答案中,dystroy 引用了 Javadoc 中的“如果存在打开的,Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象。”所以应该自动关闭吧?
        猜你喜欢
        • 1970-01-01
        • 2014-09-24
        • 2015-01-24
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        相关资源
        最近更新 更多