zoukankan      html  css  js  c++  java
  • 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();
            }
        }
     
    }
  • 相关阅读:
    python 中的 用chr()数值转化为字符串,字符转化为数值ord(s)函数
    如何使用Python-GnuPG和Python3 实现数据的解密和加密
    “瑞士军刀”Netcat使用方法总结
    pyppeteer模块的基本使用
    js加密数据爬取
    requests 返回 521
    Spring注解配置定时任务<task:annotation-driven/>
    java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    tomcat同个端口配置多个项目后无后缀的页面跳转
    java中将jsonObject字符串转化为Map对象
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15061939.html
Copyright © 2011-2022 走看看