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. IDEA开发Spark的漫漫摸索(一)

    系统:Win10 01 安装IDEA IDEA版本:IntelliJ IDEA 2017.2.1 64位 使用的学生授权下载的ultimate版本,此处不赘叙安装过程. 02安装编译环境 Spark可 ...

  2. [USACO1.4]等差数列 Arithmetic Progressions

    题目描述 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双 ...

  3. mariadb yum安装

    安装 yum install mariadb mariadb-server -y 启动 systemctl start mariadb systemctl enable mariadb 安全安装 # ...

  4. haoi2018奇怪的背包题解

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5302 对于一个物品,设它体积为v,那么,在背包参数为p的情况下,它能达到gcd(v,p ...

  5. Django---登录(含随机生成图片验证码)、注册示例讲解

    登录(验证码).注册功能具体代码 # urls.py from django.contrib import admin from django.urls import path from app01 ...

  6. PartTime_网址_国外

    https://www.douban.com/group/topic/6248314/ 国外威客网站大全 国外兼职网站,以及国外外包网站.这些国外项目网站包括的项目类型很多:logo设计.图形设计.f ...

  7. HDU 5917 Instability ramsey定理

    http://acm.hdu.edu.cn/showproblem.php?pid=5917 即世界上任意6个人中,总有3个人相互认识,或互相皆不认识. 所以子集 >= 6的一定是合法的. 然后 ...

  8. (转)不看绝对后悔的Linux三剑客之awk实战精讲

    原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...

  9. linux上的shutdown命令

    定时关机:shutdown -r now 立刻重新开机 shutdown -h now 立刻关机 shutdown -k now 'Hey! Go away! now....' 发出警告讯息, 但没有 ...

  10. SpringBoot | 第二十三章:日志管理之整合篇

    前言 在本系列<第四章:日志管理>中,由于工作中日志这块都是走默认配置,也没有深入了解过,因为部署过程中直接使用了linux中的输出重定向功能,如java -jar xx.jar > ...