JDBC:数据库批处理

1 什么是批处理

  <1>批处理(batch) 操作数据库 

     批处理:一次操作中执行多条SQL语句 (相比于一次一次执行效率会提高很多)

     当向数据库中,添加大量的数据时,需要用到批处理

 

  <2>举例: 送货员的工作

    未使用批处理的时候,送货员每次只能运送 一件货物给商家

    使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户

 

2 实现批处理

Statement和PreparedStatement都支持批处理操作,这里我们介绍一下PreparedStatement的批处理方式: 

1) 要用到的方法

方法  说明

void addBatch()


将给定的 SQL 命令,添加到此 Statement 对象的当前命令列表中。

通过调用方法 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();
        }
    }
 
}

 

posted @ 2021-07-26 16:13  Jasper2003  阅读(167)  评论(0编辑  收藏  举报