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条)

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行