• 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();
            }
        }
     
    }
  • 相关阅读:
    TestNG测试用例编写和执行
    Myeclipse+TestNG白盒测试环境搭建
    Jmeter创建一个简单的http接口用例
    python 格式化日期
    测试需求分析总结
    mac终端配色
    浅谈游戏中BUFF的设计要点
    图片头代码
    My.Ioc 代码示例——避免循环依赖
    My.Ioc 代码示例——谈一谈如何实现装饰器模式,兼谈如何扩展 My.Ioc
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15061939.html
Copyright © 2020-2023  润新知