JDBC:数据库批处理
1 什么是批处理
<1>批处理(batch) 操作数据库
批处理:一次操作中执行多条SQL语句 (相比于一次一次执行效率会提高很多)
当向数据库中,添加大量的数据时,需要用到批处理
<2>举例: 送货员的工作
未使用批处理的时候,送货员每次只能运送 一件货物给商家
使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户
2 实现批处理
Statement和PreparedStatement都支持批处理操作,这里我们介绍一下PreparedStatement的批处理方式:
1) 要用到的方法
方法 | 说明 |
void addBatch() |
通过调用方法 executeBatch, 可以批量执行此列表中的命令。 |
int[] executeBatch() |
每次提交一批命令到数据库中执行,如果所有的命令都成功执行了, 那么返回一个数组,这个数组是说明每条命令所影响的行数 |
2) mysql 批处理是默认关闭的,所以需要加一个参数才打开mysql 数据库批处理,在url中添加
rewriteBatchedStatements = true 例如: url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8&rewriteBatchedStatements=true
3) 创建一张表
CREATE TABLE testBatch ( id INT PRIMARY KEY AUTO_INCREMENT, uname VARCHAR(50) )
4) 测试向表中插入 1万条数据
public class TestBatch { //使用批处理,向表中添加 1万条数据 public static void main(String[] args) { try { //1.获取连接 Connection con = DruidUtils.getConnection(); //2.获取预处理对象 String sql ="insert into testBatch(uname) values(?)"; PreparedStatement ps = con.prepareStatement(sql); //3.创建 for循环 来设置占位符参数 for (int i = 0; i < 10000 ; i++) { ps.setString(1,"小强"+i); //将SQL添加到批处理 列表 ps.addBatch(); } //添加时间戳 测试执行效率 long start = System.currentTimeMillis(); //统一 批量执行 ps.executeBatch(); long end = System.currentTimeMillis(); System.out.println("插入10000条数据使用: " +(end - start) +" 毫秒!"); } catch (SQLException e) { e.printStackTrace(); } } }