【JDBC】数据库批处理

一、什么是批处理

  • 批处理(batch) 操作数据库
    • 批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
    • 当向数据库中添加大量的数据时,需要用到批处理。
  • 举例: 送货员的工作:
    • 未使用批处理的时候,送货员每次只能运送 一件货物给商家;
    • 使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派

二、实现批处理

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

    方法 说明
    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

示例
测试向表中插入 1万条数据

测试表:

CREATE TABLE testBatch (
	id INT PRIMARY KEY AUTO_INCREMENT,
	uname VARCHAR(50)
)

测试代码

import com.cyh.utils.DruidUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BatchInsert {
    
    

    //使用批处理向表中添加10000条数据
    public static void main(String[] args) throws SQLException {
    
    
        //获取连接
        Connection con = DruidUtils.getConnection();
        //2.获取预处理对象
        PreparedStatement preparedStatement = con.prepareStatement("insert into testBatch(uname) values(?)");

        //执行批量操作
        for (int i = 0; i < 10000; i++) {
    
    
            preparedStatement.setString(1,"小强"+i);
            //将SQL添加到批处理列表
            preparedStatement.addBatch();
        }

        long start= System. currentTimeMillis();
        //统一执行批量插入操作
        preparedStatement.executeBatch();
        long end = System. currentTimeMillis();
        //关闭流
        DruidUtils.close(con,preparedStatement);
        System.out.println("一共消耗了:" + (end - start) + "毫秒");

    }
}

猜你喜欢

转载自blog.csdn.net/Guai_Ka/article/details/113764245