手机
当前位置:查字典教程网 >编程开发 >Java >java 下执行mysql 批量插入的几种方法及用时
java 下执行mysql 批量插入的几种方法及用时
摘要:方法1:Javacode复制代码代码如下:conn=DriverManager.getConnection(JDBC_URL,JDBC_US...

方法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_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();

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();

【java 下执行mysql 批量插入的几种方法及用时】相关文章:

java冒泡排序算法代码

java中 == 与 equal 的区别讲解

java生成申请单序列号的实现方法

java 字浮串提取方法汇集

grails不能运行fork模式解决方法

java中常用的排序方法

基于Java内存溢出的解决方法详解

java mail使用qq邮箱发邮件的配置方法

java从list中取出对象并获得其属性值的方法

java中servlet实现登录验证的方法

精品推荐
分类导航