需求
- 一次性插入很多条记录,一条一条插入太慢,开启批处理操作,一次性插入
代码演示
- 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* */@Testpublic 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* */@Testpublic 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));}
}
```
