博客说明
文章内容输出来源:拉勾教育Java就业急训营
什么是批处理
批处理(batch) 操作数据库
- 批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
- 当向数据库中添加大量的数据时,需要用到批处理。
举例: 送货员的工作:
- 未使用批处理的时候,送货员每次只能运送 一件货物给商家; .
- 使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户。
批处理方法
方法 | 说明 |
---|---|
void addBatch() | 将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。 通过调用方法 executeBatch 可以批量执行此列表中的命令。 |
int[] executeBatch() | 每次提交一批命令到数据库中执行,如果所有的命令都成功执行了, 那么返回一个数组,这个数组是说明每条命令所影响的行数 |
批处理的开启
MySql是默认关闭批处理的,如要使用批处理,需要先开启
需要再url中添加:rewriteBatchedStatements=true
例如: url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8&rewriteBatchedStatements=true
/**
* 使用批处理添加一万条数据
*
* @param args
*/
public static void main(String[] args) throws SQLException {
//1.获取连接
Connection con = DruidUtils.gerConnection();
//2.编写Sql
String sql = "insert into testBatch(uname) values(?)";
//3.获取预处理对象
PreparedStatement ps = con.prepareStatement(sql);
//4.执行批量插入操作
for (int i = 0; i < 10000; i++) {
ps.setString(1, "张飞" + i);
//5.将Sql添加到批处理列表
ps.addBatch();
}
//添加时间戳,测试执行效率
long start = System.currentTimeMillis();
//5.统一执行 批量插入操作
ps.executeBatch();
//添加时间戳,测试执行效率
long end = System.currentTimeMillis();
System.out.println("插入1w条数据需要:" + (end - start) + "毫秒");
DruidUtils.CloseDBCP(con,ps);
}