ORA-01000: 超出打开游标的最大数 问题的分析和解决
来源:互联网 发布:01季后赛科比数据 编辑:程序博客网 时间:2024/04/29 15:29
ORA-01000: 超出打开游标的最大数 问题的分析和解决
最近项目中报错:
java.sql.SQLException: ORA-01000: 超出打开游标的最大数
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
代码:
for (MzLoadAcctCodeInfoDto dto : list) {logger.info(qrySqlSb.toString());
ps = conn.prepareStatement(qrySqlSb.toString());
PreparedStatementHelper.setParam(1, dto.getAcctId(), ps);
rs = ps.executeQuery();
while(rs.next()) {
dbloopOne = 1;
ps = conn.prepareStatement(insertSqlSb.toString());
PreparedStatementHelper.setParam(dbloopOne++, dto.getAgreementCode(), ps);
PreparedStatementHelper.setParam(dbloopOne++, dto.getPartnerCode(), ps);
PreparedStatementHelper.setParam(dbloopOne++, rs.getString(1), ps);
PreparedStatementHelper.setParam(dbloopOne++, rs.getString(2), ps);
ps.executeUpdate();
dbloopOne = 1;
ps = conn.prepareStatement(deleteSqlSb.toString());
PreparedStatementHelper.setParam(dbloopOne++, dto.getAgreementCode(), ps);
PreparedStatementHelper.setParam(dbloopOne++, dto.getPartnerCode(), ps);
PreparedStatementHelper.setParam(dbloopOne++, dto.getAccNbr(), ps);
ps.executeUpdate();
num++;
}
}
在java代码中,执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭,调用close()方法。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭,调用close()方法。
解决方法:
1、增大游标的数量(不可取)
分析:
1.1、显然这种方法治标不治本,游标的数量往往设置一个 较小值即可,除非特殊情况;
1.2、应用程序不同,该值也不同
1.3、并么有根除代码上的缺陷
2、修改代码:
Java代码在执行conn.createStatement()和 conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor,
当PreparedStatement或statement执行操作之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statement或PreparedStatement关闭。
尤其是在循环中,因为游标一直在不停的打开,而且没有关闭;
综上所述:上面的代码在pstmt.execute();之后执行pstmt.close();方法即可
0 0
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- ORA-01000: 超出打开游标的最大数的问题
- ora-01000 超出打开游标的最大数的解决方法
- ORA-01000: 超出打开游标的最大数
- 【Oracle异常】ORA-01000: 超出打开游标的最大数
- ORA-01000: 超出打开游标的最大数
- oracle数据库ORA-01000: 超出打开游标的最大数
- Oracle ORA-01000: 超出打开游标的最大数
- ORA-01000: 超出打开游标的最大数
- Oracle: ORA-01000: 超出打开游标的最大数
- MyBatis ExecutorType.BATCH 报ORA-01000: 超出打开游标的最大数的解决
- Phalcon + Swoole扩展 开发即时通讯功能
- Android屏幕适配全攻略(最权威的官方适配指导)
- android EventBus
- 安卓剪切板
- Java中byte与16进制字符串的互相转换
- ORA-01000: 超出打开游标的最大数 问题的分析和解决
- 超融合架构 — Hyper Converged Infrastructure 小记
- 使用软连接实现mysql对嵌入式数据库的访问
- shell中读取配置文件之eval
- MySQL SQL优化案例:LIMIT M,N大偏移量分页
- python eventlet
- socket编程原理
- 做过的最短路径集合
- 【Mysql】MySQL Workbench “Error Code: 1175” 的解决方法