java做批处理操作,报错java.sql.SQLRecoverableException解决方法

来源:互联网 发布:ovid数据库检索举例 编辑:程序博客网 时间:2024/06/02 09:50

程序中作批处理操作  批处理相关参考我其他文章!~

改了几天程序了 一直报错“关闭的连接”  我实在是无奈了

因为另外一个类似的程序是可以跑的

问题是:java作批处理操作

String sql = "insert into mytable(id, name, age, hobby, address) values(?,?,?,?,?)";

oc.createPst(sql); // 封装好的

for(XXX) {

  for(xxx) {

    getInfo();

     ...

    oc.addBatch(); // 封装好的

  }

}

oc.executeBatch(); // 也是封装好的

报错关闭的连接,执行批处理失败;

我就在想是不是批处理数据添加过多,那就分批处理吧 可以搞一个count记录批处理数量

String sql = "insert into mytable(id, name, age, hobby, address) values(?,?,?,?,?)";

oc.createPst(sql);

for(XXX) {

   for(xxx) {

    getInfo();

    ...

    oc.addBatch();

    if(count % 500 == 0){ // 数字可以自己定啊

      oc.executeBatch(); // 执行之后会把preparedStatement关闭 所以要在建

      oc.createPst(sql);

    }

  }

}

oc.executeBatch(); 

可是还是不行啊 继续百度啊

参考了下 http://blog.csdn.net/majian_1987/article/details/18598589 这位仁兄的

原来是和数据库的连接池有关啊,诶没学好连接池啊

数据库连接池中的连接建立但长时间不使用,连接就会被自动回收 

我在做getInfo() 操作时 耗时比较久,导致连接被回收了 我又不知道。。。所以就一直报错

建议:

修改代码时,确保添加批处理操作的时间间隔不要相差太多,

如果实在是控制不了时间,那就先把要插入的数据保存以后,可以用vector,list等等

在循环遍历 将数据加入批处理,在执行批处理。

0 0
原创粉丝点击