码迷,mamicode.com
首页 > 编程语言 > 详细

Java代码工具箱之超出游标最大数

时间:2017-05-21 13:48:59      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:date()   read   工具箱   span   oid   color   领会   resultset   update   

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代码工具箱之超出游标最大数

标签:date()   read   工具箱   span   oid   color   领会   resultset   update   

原文地址:http://www.cnblogs.com/muyun/p/6884493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!