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个
//很快就会报错。
时间: 2024-10-28 20:28:07

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

Java代码工具箱之链接Oracle

1. 需要oracle的 odbc  jar包 2. 代码 3. 注意:ps对象和statement对象最好用完立即释放,尤其是读写数据库代码出现在 for 循环语句中时. 否则会出现游标不够的情况,超出游标最大数等游标错误! 4. 案例:我在将Excel导入到Oracle数据库中时,由于搜索网上代码,未深刻领会.在遍历Excel的每一行数据时,都执行 pre = con.prepareStatement(sql) .直到Excel中的5000行数据遍历完后才 执行   pre.close();

Java代码工具箱之解析Excel

1. 使用开源工具 jxl.jar 2. 功能:解析常规Excel.xls格式测试可行,xlsx未测试.Excel测试格式为常规类似table这种简单布局文件.第一行为标题,后面行为内容.代码 可正确解析内容,会自动丢掉第一行(标题). 3. 示例代码(自行导入必要库) 1 public static void readExcel() throws BiffException, IOException{ 2 //创建一个list 用来存储读取的内容 3 List list = new Array

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

1. 情形:有时候控制台输出太多,在MyEclipse显示不全. 2. 说明:本代码只会重定向 system.out 的内容, error及其它不受代码影响.其它应该类似. 1 //自定导入必要库 2 //然后往 Main 的 最开始一塞即可 3 //文件是否会自动新建,未测试 4 5 try { 6 System.setOut(new PrintStream(new FileOutputStream("D:\\systemOut.txt"))); 7 } catch (FileNot

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

实际上,这个错误的原因,主要还是代码问题引起的. ora-01000: maximum open cursors exceeded. 表示已经达到一个进程打开的最大游标数. 这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor.尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非

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

作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么在pl/sql中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据. 语法: CURSOR  游标名  [ (参数名  数据类型,参数名 数据类型,...)]  IS  SELECT   语句; 例如:cursor c1 is select ename from emp; 游标

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

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

从 Java 代码到 Java 堆

本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个 Integer 对象的内存开销.对象委托的成本和不同集合类型的内存效率.您将了解到如何确定应用程序中的哪些位置效率低下,以及如何选择正确的集合来改进您的代码. 优化应用程序代码的内存使用并不是一个新主题,但是人们通常并没有很好地理解这个主题.本文将简要介绍 Java 进程的内存使用,随后深入探讨您编写的 Java 代码的内存使用.最后,本文将展示提高代码内存效率的方法,特别强调了 HashMap 和 ArrayL

自学总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)

六.redis多数据类型介绍(常用命令) 6.1前提操作 #如果前面的redis环境没搭好,那么可以先暂时在 "http://try.redis.io/"中实践redis命令部分.   #为了测试方便,把redis登录密码暂时撤销   #redis一共分为五种基本数据类型:String,Hash,List,Set,ZSet #所有命令都可以到"http://www.redis.cn/commands.html"  去搜索到. #首先由于redis是一个基于key-v

Java 代码性能优化总结

35 个 Java 代码性能优化总结 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率