程序中作批处理操作 批处理相关参考我其他文章!~
改了几天程序了 一直报错“关闭的连接” 我实在是无奈了
因为另外一个类似的程序是可以跑的
问题是: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等等
在循环遍历 将数据加入批处理,在执行批处理。