需求
- 一次性插入很多条记录,一条一条插入太慢,开启批处理操作,一次性插入
代码演示
- Java代码如下 ```java package com.wisdom.java02;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Statement;
import org.junit.Test;
public class BatchTest {
/*
* 未使用批量插入数据耗时36814
* */
@Test
public void batchTest01() throws Exception{
long start = System.currentTimeMillis();
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 连接数据库
String url = "jdbc:mysql://192.168.160.131:3306/subquery";
Connection conn = DriverManager.getConnection(url,"root","2wsx#EDC");
// 操作数据库
String sql = "insert into dept values(?,?,?)";
PreparedStatement pre = conn.prepareStatement(sql);
for(int i = 0; i < 1000; i++){
pre.setObject(1, null);
pre.setObject(2, "dname"+i);
pre.setObject(3, "loc"+i);
pre.executeUpdate();
}
// 关闭资源
pre.close();
conn.close();
long end = System.currentTimeMillis();
System.out.println("耗时 : " + (end-start));
}
/*
* 使用批量插入数据耗时1959
* */
@Test
public void batchTest02() throws Exception{
long start = System.currentTimeMillis();
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 连接数据库,rewriteBatchedStatements=true,代表开启批量操作
String url = "jdbc:mysql://192.168.160.131:3306/subquery?rewriteBatchedStatements=true";
Connection conn = DriverManager.getConnection(url,"root","2wsx#EDC");
// 操作数据库
String sql = "insert into dept values(?,?,?)";
PreparedStatement pre = conn.prepareStatement(sql);
for(int i = 0; i < 1000; i++){
pre.setObject(1, null);
pre.setObject(2, "dname"+i);
pre.setObject(3, "loc"+i);
// //添加到批处理组中,先攒着
pre.addBatch();
}
// 执行批处理操作
pre.executeBatch();
// 关闭资源
pre.close();
conn.close();
long end = System.currentTimeMillis();
System.out.println("耗时 : " + (end-start));
}
}
```