gpt4 book ai didi

java - 错误 com.ibm.db2.jcc.am.SqlException : [jcc][t4][10120][10898][3. 64.82] 无效操作 : result set is closed. ERRORCODE=-4470,SQLSTATE=null

转载 作者:行者123 更新时间:2023-11-29 07:41:03 24 4
gpt4 key购买 nike

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

..........
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

关于java - 错误 com.ibm.db2.jcc.am.SqlException : [jcc][t4][10120][10898][3. 64.82] 无效操作 : result set is closed. ERRORCODE=-4470,SQLSTATE=null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30137351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com