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

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

作者:互联网

我试图在数据库表中插入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();
}

标签:java,multithreading,junit,oracle10g
来源: https://codeday.me/bug/20190727/1554648.html