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

java 下执行mysql 批量插入的几种方法及用时

发布时间:2020-12-14 20:00:00 所属栏目:Java 来源:网络整理
导读:方法1: Java code 复制代码 代码如下: conn = DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASS); pstmt = conn .prepareStatement("insert into loadtest (id,data) values (?,?)"); for (int i = 1; i = COUNT; i++) { pstmt.clearParameters()

方法1:

Java code

复制代码 代码如下:

conn = DriverManager.getConnection(JDBC_URL,JDBC_USER,JDBC_PASS);
        pstmt = conn
                .prepareStatement("insert into loadtest (id,data) values (?,?)");
        for (int i = 1; i <= COUNT; i++) {
            pstmt.clearParameters();
            pstmt.setInt(1,i);
            pstmt.setString(2,DATA);
            pstmt.execute();
        }

MyISAM:246.6秒、InnoDB:360.2秒

方法2: 使用事务,不自动commit

Java code

复制代码 代码如下:

conn = DriverManager.getConnection(JDBC_URL,JDBC_PASS);
        conn.setAutoCommit(false);
        pstmt = conn
                .prepareStatement("insert into loadtest (id,DATA);
            pstmt.execute();
            if (i % COMMIT_SIZE == 0) {
                conn.commit();
            }
        }
        conn.commit();

InnoDB:31.5秒

方法3: executeBatch

Java code

复制代码 代码如下:

conn = DriverManager.getConnection(JDBC_URL
                + "?rewriteBatchedStatements=true",?)");
        for (int i = 1; i <= COUNT; i += BATCH_SIZE) {
            pstmt.clearBatch();
            for (int j = 0; j < BATCH_SIZE; j++) {
                pstmt.setInt(1,i + j);
                pstmt.setString(2,DATA);
                pstmt.addBatch();
            }
            pstmt.executeBatch();
            if ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
                conn.commit();
            }
        }
        conn.commit();

InnoDB:5.2秒

上面的使用时必须
1)rewriteBatchedStatements=true
2)useServerPrepStmts=true

方法4:先LOAD再COMMIT

Java code

复制代码 代码如下:

conn = DriverManager.getConnection(JDBC_URL,JDBC_PASS);
        conn.setAutoCommit(false);
        pstmt = conn.prepareStatement("load data local infile '' "
                + "into table loadtest fields terminated by ','");
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= COUNT; i++) {
            sb.append(i + "," + DATA + "n");
            if (i % COMMIT_SIZE == 0) {
                InputStream is = new ByteArrayInputStream(sb.toString()
                        .getBytes());
                ((com.mysql.jdbc.Statement) pstmt)
                        .setLocalInfileInputStream(is);
                pstmt.execute();
                conn.commit();
                sb.setLength(0);
            }
        }
        InputStream is = new ByteArrayInputStream(sb.toString().getBytes());
        ((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
        pstmt.execute();
        conn.commit();

您可能感兴趣的文章:

  • Java实现批量向mysql写入数据的方法
  • java基于jdbc连接mysql数据库功能实例详解
  • java连接MySQL数据库的代码
  • java向mysql插入数据乱码问题的解决方法
  • java连接mysql数据库及测试是否连接成功的方法
  • Java中如何获取mysql连接的3种方法总结
  • Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL

(编辑:李大同)

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

    推荐文章
      热点阅读