【发布时间】:2015-07-20 04:01:38
【问题描述】:
您好,我只在 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;
}
【问题讨论】:
-
sql-server 标记是用于 Microsoft SQL Server 的,用它标记 DB2 问题是没有意义的。
-
您是否在连接上禁用了自动提交?
-
不,如果我只执行一个简单的查询(选择),我不明白为什么我必须禁用自动提交。你能解释一下吗?非常感谢
-
kjaklik刚刚发布的答案解释了它。您不必禁用自动提交,但驱动程序的行为会受到它的影响(特别是当许多驱动程序在提交时关闭光标并且 JDBC 要求在自动提交中执行新语句时,将自动提交先前的事务)