Java代码工具箱之超出游标最大数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代码工具箱之超出游标最大数相关的知识,希望对你有一定的参考价值。
1. Java大量写入oracle时容易出现此错。经过此错,也触动自己要深刻理解 java 的 prepareStatement 等对象,及数据库的连接与释放。
2. 原因:经常会出现在 for 循环中进行数据库写入操作。
3. 代码:
案例:我在将Excel导入到Oracle数据库中时,由于搜索网上代码,未深刻领会。在遍历Excel的每一行数据时,都执行
pre = con.prepareStatement(sql) 。直到Excel中的5000行数据遍历完后才 执行 pre.close(); ,结果报错,出现
超出游标错误!后来更正为在 for 循环内部,执行完 pre.executeQuery(); 紧接着,立即执行 pre.close(); (当然关闭前还要有
个 pre 判空的判断语句)。更正后,一次顺利导入5000条数据。
class myCode{ Connection con = null; PreparedStatement pre = null; ResultSet result = null; void readExcel(){ for(...) for(...) update(); } void update(){ String sql = "update myTabe set A=? where id=?"; pre = conn.prepareStatement(sql); pre.setString(1,A); pre.setLong(2, 123); pre.executeUpdate(); //报错 } static void main(String[] args){ connDB() initDbObj() readExcel() } }
正确的 update()函数应该如下:
//正确代码 void update(){ String sql = "update myTabe set A=? where id=?"; pre = conn.prepareStatement(sql); pre.setString(1,A); pre.setLong(2, 123); pre.executeUpdate(); //重点 if( pre != null ){ pre.close(); } } //pre对象用完必须立马关闭,不要放到最后和 conn一起关闭。 //否则,每次pre被设置一次,就会申请一个游标,一般游标才300个 //很快就会报错。
以上是关于Java代码工具箱之超出游标最大数的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException: ORA-01000: 超出打开游标的最大数
jdbc 查询5万条数据出现 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数
java.sql.SQLException: ORA-01000: 超出打开游标的最大数
ORA-01000: 超出最大打开游标 - java 代码失败
超出最大游标 SQLException--配置问题或游标泄漏?
Java 技术篇 - 连接oracle数据库执行sql使用close()关闭createStatement()无效无法清除游标缓存问题解决,报“ORA-01000: 超出打开游标的最大数“错误解决方法