DB2 驱动程序的Bug

项目中用的是DB2数据库. 这次中无意中发现一个DB2 Driver的Bug.

项目中的代码大致是两个Statement的嵌套遍历,代码如下:
stmt1 = conn.createStatement();
rs1 = stmt1.executeQuery(query1);
while (rs1.next()) {
.....
stmt2 = conn.createStatement();
rs2 = stmt2.executeQuery(query2);
while (rs2.next()) {
.......
}
.......
}


结果程序运行时,扔出Exception
com.ibm.db2.jcc.b.SqlException: Invalid operation: result set closed
at the line......while (rs1.next()) {
经google搜索后发现, DB2驱动ResultSet默认模式是TYPE_FORWARD_ONLY.
当内部的ResultSet遍历到结尾时, rs2.next()返回false并且关闭ResultSet.
可它竟然 闲的无聊的把两个ResultSet全给我关了,真郁闷!

最终的解决是:
只能将两个循环拆开,现将外部循环先执行,将结果存入一Object List中,后面再遍历rs2,将查询结果再set到Object中.

你可能感兴趣的:(db2,Google,IBM)