zoukankan      html  css  js  c++  java
  • 批处理——数据库

    一、简介

    1.1概念说明

      批处理(batch)------------>好比快递员【不能一件一件的送快递】
            - 批处理指的是一次操作中执行多条SQL语句
            - 批处理相比于一次一次执行效率会提高很多

    1.2步骤


            - 批处理主要是分两步:
                1.将要执行的SQL语句保存
                2.执行SQL语句
                
             Statement和PreparedStatement都支持批处理操作,这里我们只需要掌握PreparedStatement的批处理方式        

    1.3方法              

         void addBatch()
                        - 将要执行的SQL先保存起来,先不执行
                        - 这个方法在设置完所有的占位符之后调用
                    int[] executeBatch()
                        - 这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行
                        
              - mysql默认批处理是关闭的,所以我们还需要去打开mysql的批处理:
                      rewriteBatchedStatements=true
              我们需要将以上的参数添加到mysql的url地址中
            
            - 注意:低版本的mysql-jdbc驱动也不支持批处理,一般都是在修改的时候使用批处理,查询的时候不使用!
                      

     

    二、  案例演示        

     

    2.1创建一张新的数据表

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

    2.2在dao层编写数据库操作代码

    package com.tyd.batch.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserDao {
        
    public void testBatch(){
            //向t_emp表中插入10000条数据
            
            //准备两个变量
            Connection connection = null;
            PreparedStatement ps = null;
            
            try {
                //获取数据库连接
                connection=JDBCUtil.getConnection();
                //准备SQL模板
                String sql = "INSERT INTO t_emp(NAME) VALUES(?)";
                //获取PrepareStatement
                ps = connection.prepareStatement(sql);
                //创建一个for循环,来设置占位符
                for(int i = 0; i < 10000 ;i++){
                    //填充占位符
                    ps.setString(1,"emp"+i);
                    //添加到批处理方法中,调用无参的,有参的是Statement来调用的!
                    ps.addBatch();
                } 
                
                //获取一个时间戳
                long start = System.currentTimeMillis();
                //执行批处理
                ps.executeBatch();
                //获取一个时间戳
                long end = System.currentTimeMillis();
                System.out.println("共花费了:"+(end-start));
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                JDBCUtil.close(connection, ps,null);
            }
        }
    }

    2.3在main方法或test类中运行

    public static void main(String[] args) {
            System.out.println("开始执行");
            UserDao ud=new UserDao(); 
            System.out.println("执行结束");
        }

    2.4在数据库中进行验证

       SELECT * FROM t_emp;
  • 相关阅读:
    归并排序
    汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI、汉诺塔VII
    Uncle Tom's Inherited Land
    汉诺塔III
    汉诺塔X
    Frosh Week
    hdu 1007最近点对问题
    POJ1579:Function Run Fun
    Hdu1163 Eddy's digitai Roots(九余数定理)
    放苹果问题
  • 原文地址:https://www.cnblogs.com/TYDBLOG/p/7455140.html
Copyright © 2011-2022 走看看