1. Java大量写入oracle时容易出现此错。经过此错,也触动自己要深刻理解 java 的 prepareStatement 等对象,及数据库的连接与释放。

2. 原因:经常会出现在 for 循环中进行数据库写入操作。

3. 案例:我在将Excel导入到Oracle数据库中时,在遍历Excel的每一行数据时,都执行了语句

conn.prepareStatement(sql);

结果每次执行到2000行时出现游标错误。更正后,一次顺利导入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()
   close(DbOjb)()//close ps,rs
    closeDB()//close conn
} }

正确的 update()函数应该如下:(2017年5月26日 更新,下方法也不是很好的实践代码,最好的做法将conn.prepareStatement提出到for循环外)

//正确代码
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个
//很快就会报错。

——————————————————————

2017年5月26日 更新:上面代码有问题。

    String sql = "update myTabe set A=? where id=?";
pre = conn.prepareStatement(sql);

根本不应该放在 for 循环内部。应提出到 for 循环之外的上面。

更合适的代码应该为:

class myCode{

Connection con = null;
PreparedStatement pre = null;
ResultSet result = null; String sql = "update myTabe set A=? where id=?";
pre = conn.prepareStatement(sql); void readExcel(){
for(...)
for(...)
update();
} void update(){ pre.setString(1,A);
pre.setLong(2, 123); pre.executeUpdate(); } static void main(String[] args){
connDB()
initDbObj()
readExcel()   close(DbOjb)()//close ps,rs
    closeDB()//close conn
} }

或者使用较复杂的 “PreparedStatement的批量提交功能” 。

Java代码工具箱之超出游标最大数的更多相关文章

  1. Java代码工具箱之链接Oracle

    1. 需要oracle的 odbc  jar包 2. 代码 3. 注意:ps对象和statement对象最好用完立即释放,尤其是读写数据库代码出现在 for 循环语句中时. 否则会出现游标不够的情况, ...

  2. Java代码工具箱_用Set给List/Vector去重

    参考 方法一:需要2个容器,1个迭代去重,1个作为结果容器. 此方法其实想法比较简单也是正常思路: package com.yonyou.test; import java.util.List; im ...

  3. Java代码工具箱之控制台输出重定向_控制台输出到文件

    1. 情形:有时候控制台输出太多,在MyEclipse显示不全. 2. 说明:本代码只会重定向 system.out 的内容, error及其它不受代码影响.其它应该类似. //自定导入必要库 //然 ...

  4. Java代码工具箱之解析单行单列简单Excel

    1. 使用开源工具 jxl.jar 2. 功能:解析常规Excel.xls格式测试可行,xlsx未测试.Excel测试格式为常规类似table这种简单布局文件.第一行为标题,后面行为内容.代码 可正确 ...

  5. java.sql.SQLException: ORA-01000: 超出打开游标的最大数

    实际上,这个错误的原因,主要还是代码问题引起的.  ora-01000: maximum open cursors exceeded.  表示已经达到一个进程打开的最大游标数.  这样的错误很容易出现 ...

  6. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  7. oracle异常处理——ORA-01000:超出打开游标最大数

    oracle异常处理--ORA-01000:超出打开游标最大数https://www.cnblogs.com/zhaosj/p/4309352.htmlhttps://blog.csdn.net/u0 ...

  8. 21. orcle导出sql脚本时,提示“超出打开游标最大数”

    1.解决办法:修改下打开游标最大数即可 SQL> show parameter open_cursors;NAME                                  TYPE   ...

  9. IntelliJ IDEA,代码行宽度超出限制时自动换行

    转自:http://my.oschina.net/angerbaby/blog/471351 当我们使用IDE写代码时,为了保证代码的可阅读性和优雅性,通常会借助IDE的代码风格设置功能,令IDE智能 ...

随机推荐

  1. CPU死锁

    https://blog.csdn.net/sunny05296/article/details/82858071 最近碰到了Centos7.2上终端打印soft lockup CPU死锁,系统无响应 ...

  2. PHP下载远程图片的几种方法总结

    1. 使用file_get_contents function dlfile($file_url, $save_to) { $content = file_get_contents($file_url ...

  3. EventLoop-浏览器与Node.js--整理

    近来面试中会遇到的问题,关于浏览器和Nodejs两个运行环境的Event loop. 整理值得阅读的优秀文章 参考文章: 1.不要混淆nodejs和浏览器的eventloop 2.nodejs官网关于 ...

  4. Luogu P2833 等式 我是傻子x2

    又因为调一道水题而浪费时间...不过细节太多了$qwq$,暴露出自己代码能力的不足$QAQ$ 设$d=gcd(a,b)$,这题不是显然先解出来特解,即解出 $\frac{a}{d}x_0+\frac{ ...

  5. Luogu P4159 [SCOI2009]迷路 矩阵快速幂+精巧转化

    大致就是矩阵快速幂吧.. 这个时候会发现这些边权$\le 9$,然后瞬间想到上回一道题:是不是可以建一堆转移矩阵再建一个$lcm(1,2,3,4,5,6,7,8,9)$的矩阵?...后来发现十分的慢q ...

  6. 使用命令行+代理更新Android SDK

    在无桌面的Linux上面安装Jenkins,要配置成Andorid 的持续集成环境Jenkins持续集成Android项目,需要在无桌面的Linux(ubuntu,centos)上安装Android ...

  7. 有效使用Mock编写java单元测试

    Java单元测试对于开发人员质量保证至关重要,尤其当面对一团乱码的遗留代码时,没有高覆盖率的单元测试做保障,没人敢轻易对代码进行重构.然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编 ...

  8. how to keep impact-crusher in good condition

    how to keep impact-crusher in good condition Why we have to maintenance impact crusher? As we talked ...

  9. OpenStack创建实例错误解决方法

    实例执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Build of instance beaeb5e0-26eb-4044-ae14-bb87d509886d aborted: Fa ...

  10. Spring事务管理的注解方式

    使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制 ...