zoukankan      html  css  js  c++  java
  • sql批处理(batch)的简单使用

    批处理指的是一次操作中执行多条SQL语句,相比于一次一次执行效率会提高很多

    • 批处理主要是分两步:
    1. 将要执行的SQL语句保存
    2. 执行SQL语句

    Statement和PreparedStatement都支持批处理操作,PreparedStatement的批处理方式:

    • 方法:
      • void addBatch():将要执行的SQL先保存起来,先不执行,这个方法在设置完所有的占位符之后调用
      • int[] executeBatch():这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行

    mysql默认批处理是关闭的,所以还需要去打开mysql的批处理:

    rewriteBatchedStatements=true

    需要将以上的参数添加到mysql的url地址中,不加的话,也能执行,但并不是真正的批处理,很慢。

    注意:低版本的mysql-jdbc驱动也不支持批处理,一般都是在修改的时候使用批处理,查询的时候不使用!(mysql-connector-java-5.1.7-bin.jar不支持,mysql-connector-java-5.1.42.jar支持)

    1、创建一张新的数据表

    CREATE TABLE student(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(50)
    )

    2、引入批处理

     1 @Test//测试批处理
     2 public void testBatch(){
     3     //向student表中插入10000条数据
     4     //准备两个变量
     5     Connection connection = null;
     6     PreparedStatement ps = null;
     7     try {
     8         conn = DBUtil.getConn();//获取数据库连接
     9         String sql = "INSERT INTO student(NAME) VALUES(?)";//准备SQL模板
    10         ps = conn.prepareStatement(sql);//获取PrepareStatement
    11         //创建一个for循环,来设置占位符
    12         for(int i = 0; i < 1000 ;i++){
    13             ps.setString(1,"stu"+i);//填充占位符
    14             ps.addBatch();//添加到批处理方法中,调用无参的方法,有参的是Statement来调用的!
    15         } 
    16         
    17         long start = System.currentTimeMillis();//获取一个时间戳
    18         ps.executeBatch();//执行批处理
    19         long end = System.currentTimeMillis();//获取一个时间戳
    20         System.out.println("用时:"+(end-start));
    21     } catch (SQLException e) {
    22         e.printStackTrace();
    23     }
    24 }

    批处理执行效率高,资源利用率好!

    插入1000条数据(没有开启批处理):13120ms

    插入1000条数据(开启批处理):517ms

     DBUtil工具类 --->资源目录--->工具类--->数据库操作工具类

    mysql-connector-java-5.1.42.jar --->资源目录--->jar包资源--->mysqlConnection jar包

  • 相关阅读:
    Go基础数据类型
    在foreach中使用distinct查找不重复记录
    DataTable,List去重复记录的方法(转载)
    ArcEngine的IMap接口(转载)
    根据Excel表格建立Shp文件(开发详解及源代码)(转载)
    axmapcontrol和mapcontrol有什么区别呢(转发)
    DataSet多表查询操作(转载)
    c#调用DLL(转载)
    wall 系列技术贴
    ArcEngine的IFeaturLayer接口(转载)
  • 原文地址:https://www.cnblogs.com/lixiang1993/p/7451793.html
Copyright © 2011-2022 走看看