zoukankan      html  css  js  c++  java
  • 批处理

    批处理(batch)------------>好比快递员【不能一件一件的送快递】
            - 批处理指的是一次操作中执行多条SQL语句
            - 批处理相比于一次一次执行效率会提高很多
            
            - 批处理主要是分两步:
                1.将要执行的SQL语句保存
                2.执行SQL语句
                
            - Statement和PreparedStatement都支持批处理操作,此处以PreparedStatement的批处理方式为例:
                - 方法:
                    void addBatch()
                        - 将要执行的SQL先保存起来,先不执行
                        - 这个方法在设置完所有的占位符之后调用
                    int[] executeBatch()
                        - 这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行
                        
            - mysql默认批处理是关闭的,所以我们还需要去打开mysql的批处理:
                    rewriteBatchedStatements=true
                我们需要将以上的参数添加到mysql的url地址中
            
            - 注意:低版本的mysql-jdbc驱动也不支持批处理,一般都是在修改的时候使用批处理,查询的时候不使用!
            
            
            
        案例演示:
            1.创建一张新的数据表
                CREATE TABLE t_emp(
                    id INT PRIMARY KEY AUTO_INCREMENT,
                    NAME VARCHAR(50)
                )
            2.反复打开数据库客户端,插入语句【相当于每次获取一个connection连接,执行executeUpdate语句】
                INSERT INTO t_emp(NAME) VALUES('张三');
                SELECT * FROM t_emp;
                TRUNCATE TABLE emp_batch;//清空表
                SELECT COUNT(*) FROM emp_batch;//统计插入数
                
            3.引出批处理--->执行效率高,资源利用率好!    

      
     1 public class JDBCUtil {
     2     private static String username="root";
     3     private static String password="123456";
     4     //添加问号?后参数,打开mysql批处理
     5     private static String url="jdbc:mysql://localhost:3306/student?rewriteBatchedStatements=true";
     6     private static String driver="com.mysql.jdbc.Driver";
     7     
     8     private static Connection conn=null;
     9     static{
    10         try {
    11             Class.forName(driver);
    12         } catch (ClassNotFoundException e) {
    13             e.printStackTrace();
    14         }
    15     }
    16     public static Connection getConnection(){
    17         try {
    18             conn = DriverManager.getConnection(url, username, password);
    19             return conn;
    20         } catch (SQLException e) {
    21             return null;
    22         }
    23     }
    24     
    25     public static void close(Connection conn,PreparedStatement ps){
    26         if(conn!=null){
    27             try {
    28                 conn.close();
    29             } catch (SQLException e) {
    30                 // TODO Auto-generated catch block
    31                 e.printStackTrace();
    32             }
    33         }
    34         if(ps!=null){
    35             try {
    36                 ps.close();
    37             } catch (SQLException e) {
    38                 // TODO Auto-generated catch block
    39                 e.printStackTrace();
    40             }
    41         }
    42     }
    43 }
    数据库封装设置—此处打开mysql的批处理
      
     1  @Test//测试批处理
     2             public void testBatch(){
     3                 //向t_emp表中插入10000条数据
     4                 
     5                 //准备两个变量
     6                 Connection connection = null;
     7                 PreparedStatement ps = null;
     8                 
     9                 try {
    10                     //获取数据库连接
    11                     connection=JDBCUtil.getConnection();
    12                     //准备SQL模板
    13                     String sql = "INSERT INTO t_emp(NAME) VALUES(?)";
    14                     //获取PrepareStatement
    15                     ps = connection.prepareStatement(sql);
    16                     //创建一个for循环,来设置占位符
    17                     for(int i = 0; i < 10000 ;i++){
    18                         //填充占位符
    19                         ps.setString(1,"emp"+i);
    20                         //添加到批处理方法中,调用无参的,有参的是Statement来调用的!
    21                         ps.addBatch();
    22                     }
    23                     
    24                     //获取一个时间戳
    25                     long start = System.currentTimeMillis();
    26                     //执行批处理
    27                     ps.executeBatch();
    28                     //获取一个时间戳
    29                     long end = System.currentTimeMillis();
    30                     System.out.println("共花费了:"+(end-start));
    31                 } catch (SQLException e) {
    32                     e.printStackTrace();
    33                 }
    34             }
    设置批处理

      注意:将批处理加入到事务中时,批处理的效率会更高

  • 相关阅读:
    IE各版本CSS Hack(兼容性处理)语法速查表
    如何使用Three.js加载obj和mtl文件
    C# windows服务制作(包括安装及卸载)
    初识 Sql Server存储过程
    初始Bootstrap
    微软语言包实现汉字转拼音
    Autocomplete 自动补全(Webform实战篇)
    Npoi导出Excel 实战篇(Webform)
    Linq 知识回顾
    常用正则用法汇总
  • 原文地址:https://www.cnblogs.com/kangxingyue-210/p/7454771.html
Copyright © 2011-2022 走看看