错误 com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][3.64.82] 无效操作:结果集已关闭。错误代码=-4470,SQLSTATE=null

Error com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][3.64.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null

你好我只在 DB2 中遇到这个问题,我正在使用普通 jdbc 来执行一个简单的查询。
然后我获取 ResultSet,在获取结果集期间,我调用另一个方法,该方法依次执行另一个查询(打开和关闭另一个 ResultSet)。 当控制权返回给调用者时,我原来的 ResultSet 被关闭了,这真的很奇怪..
PS:下面我 post 的代码可以在 Sql 服务器甚至 DB2 Express 上正常工作,但在客户端环境中(Z/OS 上的 DB2)驱动程序版本 3.64.82 编号

..........
    PreparedStatement  pst=conn.prepareStatement(query);
    ResultSet rs=pst.executeQuery();

    while(rs.next()){
        System.out.println("Id:"+rs.getInt("ID"));
        System.out.println("ULTERIORE SPECIFICA   "+getUlterioreSpecifica(conn,rs.getInt("ID")));
        System.out.println("Desc: "+rs.getString("DESC"));
        System.out.println("ETA: "+rs.getInt("ETA"));

    }
    ........

//其他方法

    private static String getUlterioreSpecifica(Connection conn, int int1) throws Exception{

    String query="select ult_desc from specifica where id=?";
    String retVal="";
      PreparedStatement pst=conn.prepareStatement(query);
      pst.setInt(1, int1);
      ResultSet rs=pst.executeQuery();
      while(rs.next()){
          retVal=rs.getString(1);
      }
      rs.close();
      pst.close();
    return retVal;
}

您可能在自动提交模式下工作,并且此特定驱动程序的默认行为可能是在提交时关闭结果集。

因此基于 How can I avoid ResultSet is closed exception in Java?

中的评论

您需要做的是在创建语句时设置ResultSet.HOLD_CURSORS_OVER_COMMIT