sambindisga 2012-02-16 21:50
浏览 399
已采纳

关于jdbc事务处理,批量插入数据的问题

部分代码如下:

Class.forName(driver).newInstance();
con = DriverManager.getConnection(url,"root","123456");
if (con==null){
System.out.println("NULL");
}
String SQL = "Insert into test.test value (null,?,?,?,?,?,?,?,?,?,?,?,?,?);" ;
con.setAutoCommit(false);

PreparedStatement pst = (PreparedStatement) con.prepareStatement(SQL);
while((dbtxtcontent = br.readLine())!=null)
{
dbtxtcontent = dbtxtcontent.replaceAll("\'","");
String[] val = dbtxtcontent.split(",");
boolean flag = false;
try {
pst.setInt(1, k);
k++;
pst.setString(2, ""+val[0]);
pst.setString(3, ""+val[1]);
pst.setString(4, ""+val[2]);
pst.setString(5, ""+val[3]);
pst.setString(6, ""+val[4]);
pst.setString(7, ""+val[5]);
pst.setString(8, ""+val[6]);
pst.setString(9, ""+val[7]);
pst.setString(10, ""+val[8]);
pst.setString(11, ""+val[9]);
pst.setString(12, ""+val[10]);
pst.setString(13, ""+val[11]);
pst.addBatch();

}
catch (Exception e)
{
System.err.println("Error CODE:" + e);
}
line++;
}
pst.executeBatch();
con.commit();
pst.close();

con.close();

原程序目的是获取一数据文件内容,并将数据插入数据库。
现在的问题是,数据量较大,全部加入到addBatch,执行时提示内存溢出,
读一条插一条的方法不能在指定的时间内将数据插入数据库,
我想分多次插入,例如每次20000条,数据不是整万的,有零头,尝试了很多次,都没有找到方法
请问大神们该如何修改这段代码?????

  • 写回答

2条回答

  • finallygo 2012-02-19 21:58
    关注

    这个不是很简单,设置一个变量记录下,
    int count = 0;
    while(readline) {
    count++;
    if(count==2000){
    executeBatch();
    count = 0;
    }
    }
    if(count>0){
    executeBatch();
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现