JDBC p4 批处理

批处理

  • 基本介绍:

    1. 当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。
    2. JDBC的批量处理语句包括下面方法:
      • addBatch():添加需要批量处理的SQL语句或参数;
      • executeBatch():执行批量处理语句;
      • clearBatch():清空批处理包的语句;
    3. JDBC连接MySQL时,如果要使用批处理功能,请在url中加入参数:rewriteBatchedStatements=true
    4. 批处理往往和PreparedStatement一起搭配使用,可以即减少编译次数,又减少运行次数,效率大大提高。
    5. 批处理是将我们的SQL语句先存放在ArrayList中,当添加到指定的值后就executeBatch,批量处理。批处理会减少我们发送sql语句的网络开销,而且减少编译次数,因此效率提高。

    案例:

    package com.hspedu.jdbc.batch_;
    
    import com.hspedu.jdbc.utils.JDBCUtils;
    import org.junit.jupiter.api.Test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /**
     * @author: 86199
     * @date: 2023/7/20 15:34
     * Description: 演示Java 的 批处理
     */
    public class Batch_ {
        //传统方法添加数据到admin2表
        @Test
        public void noBatch(){
            //得到连接
            Connection connection;
            PreparedStatement preparedStatement;
    
            try {
                connection = JDBCUtils.getConnection();
    
                String sql = "insert into admin2 values (NULL, ?, ?)";
                preparedStatement = connection.prepareStatement(sql);
    
    
                System.out.println("开始执行");
                long start = System.currentTimeMillis();
                for (int i = 0; i < 5000; i++) {
                    preparedStatement.setString(1, "jack" + i);
                    preparedStatement.setString(2, "666");
                    //执行
                    preparedStatement.executeUpdate();
                }
                long end = System.currentTimeMillis();
                System.out.println("传统方式 耗时 = " + (end - start));//传统方式 耗时 = 4825
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    
            //关闭资源
            JDBCUtils.close(null, preparedStatement, connection);
        }
    
    
        //使用批量方式添加数据
        @Test
        public void batch(){
            //得到连接
            Connection connection;
            PreparedStatement preparedStatement;
    
            try {
                connection = JDBCUtils.getConnection();
    
                String sql = "insert into admin2 values (NULL, ?, ?)";
                preparedStatement = connection.prepareStatement(sql);
    
    
                System.out.println("开始执行");
                long start = System.currentTimeMillis();
                for (int i = 0; i < 5000; i++) {
                    preparedStatement.setString(1, "jack" + i);
                    preparedStatement.setString(2, "666");
                    //将 sql语句加入批处理包
                    //执行
                    preparedStatement.addBatch();
                    //当有5000条时,再批量执行
                    if((i + 1) % 1000 == 0){
                        preparedStatement.executeBatch();
                        //清空
                        preparedStatement.clearBatch();
                    }
                }
                long end = System.currentTimeMillis();
                System.out.println("批量包方式 耗时 = " + (end - start));//批处理方式 耗时 = 87
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    
            //关闭资源
            JDBCUtils.close(null, preparedStatement, connection);
        }
    }
    
    

热门相关:我的治愈系游戏   富贵不能吟   闺范   裙上之臣   神算大小姐