【问题标题】:Open two resultsets simultaneously同时打开两个结果集
【发布时间】:2011-03-05 04:02:30
【问题描述】:

我正在尝试这样做:

while (rs.next()) {
    int id = rs.getInt(1);

    ResultSet innerRs = stmt.executeQuery("select something from sometable where id =" + id + ";");

    String one = innerRs.getString(1);
    String two = rs.getString(2);    //result set is already closed thrown here. 

}

但我收到错误“结果集已关闭”。我正在使用 Postgresql。我真的想不出另一种不是很费力的方法。如何解决此错误?

【问题讨论】:

    标签: java sql jdbc


    【解决方案1】:

    您不需要两个结果集。只需 learn 和 SQL JOIN clause,这样您就可以在单个 SQL 查询中从两个不同的表中获取所需的数据。

    如果您真的需要,那么创建一个单独的语句而不是重复使用现有的语句确实是要走的路。重用它会强制关闭所有以前打开的游标(结果集)。

    【讨论】:

    • 我认为加入可能是理想的,谢谢。将执行它并查看。
    • @providence 可能是加入的最佳选择(我承认我没有读过你的字符串),但你为什么会收到错误的答案是我作为第一个答案发布的结果集已关闭。很高兴知道您将来是否会遇到这种情况。我在编写 2 个单独的 DBMS 之间的接口时遇到了类似的问题 :)
    • 太棒了,这成功了。总是很高兴了解这样的功能!另外,感谢@rayman86 解释错误的性质!这些知识肯定会在某个时候派上用场+1
    • @providence:不客气。 @ray:是的,你的答案已经得到了投票。顺便说一句,2 个独立的 DBMS 怎么会共享同一个语句?
    • 好吧,他们没有。该语句是针对单个 dmbs 的,但我需要结果集来修改另一个中的一些并在第一个上运行更多查询,所以当我尝试重新使用该语句时,我得到了错误。我最终使用了 3 个语句,但尝试重用是向我展示了这一点的经验 :)
    【解决方案2】:

    你使用stmt.executeQuery(),你使用stmt执行rs吗?如果是这样,您需要一个新的statement,因为创建一个您使用的查询已经强制它关闭,从而导致此错误。

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2017-07-01
      • 2019-06-27
      相关资源
      最近更新 更多