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

15214638022

15214638022

2016-02-19 10:32

下面图老师小编要向大家介绍下java 下执行mysql 批量插入的几种方法及用时,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

方法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秒

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

Java code
代码如下:

conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
        conn.setAutoCommit(false);
        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();
            if (i % COMMIT_SIZE == 0) {
                conn.commit();
            }
        }
        conn.commit();

InnoDB:31.5秒

方法3: executeBatch

Java code
代码如下:

conn = DriverManager.getConnection(JDBC_URL
                + "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
        conn.setAutoCommit(false);
        pstmt = conn
                .prepareStatement("insert into loadtest (id, data) values (?, ?)");
        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();

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

InnoDB:5.2秒

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

方法4:先LOAD再COMMIT

Java code
代码如下:

conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, 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();

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
java 下执行mysql 批量插入的几种方法及用时

批量执行sql语句的方法

编程语言 网络编程
批量执行sql语句的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java获取最后插入MySQL记录的自增ID值的3种方法

编程语言 网络编程
Java获取最后插入MySQL记录的自增ID值的3种方法

MYSQL批量插入数据的实现代码

编程语言 网络编程
MYSQL批量插入数据的实现代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

XP下进入DOS环境的几种方法

windows 操作系统
XP下进入DOS环境的几种方法

将Java程序作成exe文件的几种方法

编程语言 网络编程
将Java程序作成exe文件的几种方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

xml 中的冒号 读取问题的解决

xml 中的冒号 读取问题的解决

六月新整理的qq好友分组设计 - QQ情侣分组

六月新整理的qq好友分组设计 - QQ情侣分组
下拉加载更多内容 ↓