com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10120][10898] 操作无效:已关闭 result set。
at com.ibm.db2.jcc.c.wf.mb(wf.java:3193)
at com.ibm.db2.jcc.c.wf.c(wf.java:247)
at com.ibm.db2.jcc.c.wf.next(wf.java:234)
第一次接触DB2,痛苦万分。。。
对上面的异常我表示很不可思议,反复检查代码,发现在抛出该异常之前并为关闭resultset。俗话说内事不决找baidu,外事不决找google,于是,我在2大搜索引擎上折腾许久,没有对口的。
没办法了,只能自力更生了,我猜是不是DB2自动关闭的。
于是写了几行代码测试了一下,如下:
int j = 1; boolean eof; while(rs != null){ eof = rs.next(); if(eof){ System.out.println(j); j++; } else { System.out.println("======================== null"); } }
运行结果如下:
======================== null
com.ibm.db2.jcc.c.SqlException: [ibm][db2][jcc][10120][10898] 操作无效:已关闭 result set。
at com.ibm.db2.jcc.c.wf.mb(wf.java:3193)
at com.ibm.db2.jcc.c.wf.c(wf.java:247)
at com.ibm.db2.jcc.c.wf.next(wf.java:234)
果然,当rs.next()读出来是null时,DB2将resultSet关闭了,再执行rs.next()就会抛出已关闭异常。。。
当我把数据库连接换成oracle时,当读出来是null时,不关闭resultSet,只会一直打印======================== null
关于DB2自动关闭resultSet只是我的猜测,暂未找到理论依据,我也没有去ibm官网求证(英文伤不起)。
总结:一直觉得自己在解决问题上的能力比较薄弱,碰到问题通常“一查二问三猜”—去网上查相关资料,问身边的朋友,自己写个代码瞎猜,再就没辙了。。。
希望无所不能的大虾们不吝赐教,多谢!