超出打开游标的最大数异常的解决
来源:互联网 发布:ipadmini2怎么信任软件 编辑:程序博客网 时间:2024/05/16 04:38
最近项目中报错:
java.sql.SQLException: ORA-01000: maximum open cursors exceeded
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedSt
即:打开的游标超出了游标的最大数:
分析:在这个业务中一次处理数据为1000条,通过命令:show parameter open_cursor;查看游标数量为3000,在这种情况下测试没问题;
修改游标数量为100,alter system set open_cursors=100;再测测试出现上述问题;经跟踪代码发现在程序
com.asiainfo.boss.so.ams.exe.ServiceTemp.serviceTemp(HashMap[])中端类似于下面的代码:
for (int i = 0; i < maps.length; i++){
pstmt = conn.prepareStatement(sql_up.toString());
*****
pstmt.execute();
}
在这种情况下游标不停的打开而没有关闭,当循环次数足够大时就会出现上面的错误。
解决方法:
1、增大游标的数量(不可取)
分析:
1.1、显然这种方法治标不治本,游标的数量往往设置一个 较小值即可,除非特殊情况;
1.2、应用程序不同,该值也不同
1.3、并么有根除代码上的缺陷
2、修改代码:
Java代码在执行conn.createStatement()和 conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor,
当PreparedStatement或statement执行操作之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statement或PreparedStatement关闭。
尤其是在循环中,因为游标一直在不停的打开,而且没有关闭;
综上所述:上面的代码在pstmt.execute();之后执行pstmt.close();方法即可
java.sql.SQLException: ORA-01000: maximum open cursors exceeded
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedSt
即:打开的游标超出了游标的最大数:
分析:在这个业务中一次处理数据为1000条,通过命令:show parameter open_cursor;查看游标数量为3000,在这种情况下测试没问题;
修改游标数量为100,alter system set open_cursors=100;再测测试出现上述问题;经跟踪代码发现在程序
com.asiainfo.boss.so.ams.exe.ServiceTemp.serviceTemp(HashMap[])中端类似于下面的代码:
for (int i = 0; i < maps.length; i++){
pstmt = conn.prepareStatement(sql_up.toString());
*****
pstmt.execute();
}
在这种情况下游标不停的打开而没有关闭,当循环次数足够大时就会出现上面的错误。
解决方法:
1、增大游标的数量(不可取)
分析:
1.1、显然这种方法治标不治本,游标的数量往往设置一个 较小值即可,除非特殊情况;
1.2、应用程序不同,该值也不同
1.3、并么有根除代码上的缺陷
2、修改代码:
Java代码在执行conn.createStatement()和 conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor,
当PreparedStatement或statement执行操作之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statement或PreparedStatement关闭。
尤其是在循环中,因为游标一直在不停的打开,而且没有关闭;
综上所述:上面的代码在pstmt.execute();之后执行pstmt.close();方法即可
1 0
- 超出打开游标的最大数异常的解决
- 超出打开游标的最大数异常
- 处理超出打开游标的最大数异常
- 处理超出打开游标的最大数异常
- 【Oracle异常】ORA-01000: 超出打开游标的最大数
- Java Oracle JDBC 超出打开游标的最大数异常
- 处理超出打开游标的最大数异常
- 超出打开游标的最大数 问题
- oracle 超出打开游标的最大数
- Java-超出打开游标的最大数
- 超出打开游标的最大数
- 处理超出打开游标的最大数异常(ORA-01000: maximum open cursors exceeded)
- 处理超出打开游标的最大数异常(ORA-01000: maximum open cursor )
- MyBatis ExecutorType.BATCH 报ORA-01000: 超出打开游标的最大数的解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- iOS倒计时的实现
- PADS Router自动布线出现问题 策略性文件丢失或损坏
- Android 5.0 权限管理导致的apk安装失败解决方案
- Unity3d面试1
- Eclipse中的Maven web项目pom文件总是提示Missing artifact *.jar
- 超出打开游标的最大数异常的解决
- 一起学Java(一)
- Qt Creator 中的添加“注释段落”的快捷方法
- solr教程,值得刚接触搜索开发人员一看
- java堆栈类使用实例(java中stack的使用方法
- genymotion切换中英输入法
- Android 5.0 设置语言的增加和删除
- Linux常用命令汇总
- jQuery $.each用法