加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何将百万数据插入数据库

发布时间:2020-12-15 04:34:52 所属栏目:Java 来源:网络整理
导读:我试图在数据库表中插入100万条记录. 我想创建至少3个线程,每个线程触发一个插入,然后我们可以在每一秒获得3个并行请求.我们可以通过使每个线程等待并一起唤醒来控制插入的触发完全同时发生相同的中断.然后每个线程进入睡眠状态,直到经过1秒钟的窗口.然后整
我试图在数据库表中插入100万条记录.

我想创建至少3个线程,每个线程触发一个插入,然后我们可以在每一秒获得3个并行请求.我们可以通过使每个线程等待并一起唤醒来控制插入的触发完全同时发生相同的中断.然后每个线程进入睡眠状态,直到经过1秒钟的窗口.然后整个过程将重复.我怎么能完成它?

任何建议或提示都会有所帮助.

解决方法

这是基于来自.. http://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/的mykong代码的批量插入的快速示例

这基本上为您提供了sqlloader的速度,它可以进行批量插入.并且只应使用1个线程.

我在这里做的是将插入放入一个循环中,表明你必须每隔几千条记录清除批次.

您将删除无限循环并让它插入数据而不是硬编码的mkyong数据

String insertTableSQL = "INSERT INTO DBUSER"
        + "(USER_ID,USERNAME,CREATED_BY,CREATED_DATE) VALUES"
        + "(?,?,?)";

PreparedStatement preparedStatement = dbConnection.prepareStatement(insertTableSQL);
try {
    dbConnection.setAutoCommit(false);

    int batchTotal=0;
    for  (;;) { // infinate loop? change this to get your data here
        preparedStatement.setInt(1,101);
        preparedStatement.setString(2,"mkyong101");
        preparedStatement.setString(3,"system");
        preparedStatement.setTimestamp(4,getCurrentTimeStamp());
        preparedStatement.addBatch();
        if (batchTotal++ == 4096) {
            int[] result = preparedStatement.executeBatch();
            preparedStatement.clearBatch();
            batchTotal=0;                    
        }
    }
    if (batchTotal > 0) {
        int[] result = preparedStatement.executeBatch();
    }

    dbConnection.commit();
}  finally {
    preparedStatement.close();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读