问题描述
先不考虑在oralce中增大游标数.我的需求是先查询一张表,while(rs.next())进行处理,根据处理结果,分别先3个表插入或者更新数据(一个事物).使用的是proxool连接池.我先在程序中取得两个连接,一个查询,另一个进行批量更新删除.然后再循环中处理,循环末尾把批量删除preparestatement关掉,结果出现ora01000.后来改用statement的batch()还是出ora01000,忘高手可以教导方法解决这个问题,不甚感激. 问题补充:WAMING5 写道
解决方案
发现了一个查询 值关闭了resultset没关闭statement 会不会有问题? 会,statement 如果在循环里面的操作肯定会有问题的。
解决方案二:
恩,resultset也得关闭了。
解决方案三:
如果是300的话,应该代码有问题,建议你查查代码
解决方案四:
奥,出现这种情况只有两种可能,一就是游标数真的很少,可以用SQL查询下。二、就是重复创建没有及时关闭,例如再循环中创建却没有再循环中关闭,建议检查下代码。
解决方案五:
引用 很明显,问题出在逆循环内部,你一直再循环里面创建preparestatement 而从未去释放,这样就会创建很多,最后当然是会报ORA-01000: 超出打开游标的最大数,很简单,在循环内部操作完毕后关闭新创建的preparestatement就好了可是我在末尾关闭了preparestatement if(update_stm!=null){try{update_stm.close();}catch(Exception e){}}循环底部关闭了,每次循环都关闭了开的新的 代码贴出来吧
解决方案六:
很明显,问题出在逆循环内部,你一直再循环里面创建preparestatement 而从未去释放,这样就会创建很多,最后当然是会报ORA-01000: 超出打开游标的最大数,很简单,在循环内部操作完毕后关闭新创建的preparestatement就好了