批处理——数据库

一、简介

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;
posted @ 2017-08-30 20:23  TYD  阅读(232)  评论(0编辑  收藏  举报