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;
  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/TYDBLOG/p/7455140.html
Copyright © 2011-2022 走看看