语言:java,数据库:oracle
开发中通过jdbc做批量删除对象时,出现了如下异常:
java.sql.SQLException: ORA-01000: 超出打开游标的最大数
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
出现这种异常的原因很明确:超出打开游标的最大数。
分析:
Java代码中,执行conn.createStatement()或conn.prepareStatement()新建statement时,相当于在数据库中打开了一个cursor。所以,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题,因为游标在不停的打开却没有关闭。
解决这个问题的方法有两种:
修改数据库游标cursor上限值
从上图中可以看出oracle当前数据库的游标cursor上限值是300