mysql--批处理应用(java)

文章目录

  • 批处理应用
    • 1. 基本介绍
    • 2.实际应用

批处理应用

1. 基本介绍

  1. Java中提供批量更新机制,可以将多条SQL语句一次性交给数据库批量处理。
  2. JDBC批量处理方法:
    (1)addBach(): 添加需要批量处理的SQL语句或参数。
    (2)execute Bach():执行语句
    (3)clearBach():清空语句
    批处理时往往需要清空一批再执行一批。

3.JDBC连接MySQL时,若使用批处理功能须在url 中添加参数 rewriteBachStatementstrue

4.批处理往往与PraparedStatement一起搭配使用,既可减少编译次数也可减少运行次数,提高效率。

2.实际应用

注意:mysql8不需要在url中添加参数

代码演示:传统添加模式与批量添加对比

package Jdbc.myjdbc;

import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @author zq
 * 批处理应用
 */
public class Batch_ {
    @Test
    public void noBath()throws SQLException {
        Connection connection = JDBCUtils.getConnection();

        String sql = "insert into  admin2 values(null,?,?)";

        PreparedStatement 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);
        JDBCUtils.close(null,preparedStatement,connection);

    }
    @Test
    //批量方式处理数据
    public  void  Bath() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        String sql ="insert into admin2 values(null,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        System.out.println("开始执行");
        //记录开始时间
        long start = System.currentTimeMillis();

        //批量执行,此时记得在配置文件中加入rewriteBatchedStatements=true
//        mysql8不想要添加
        for (int i = 0; i < 5000; i++) {
            preparedStatement.setString(1,"jack"+i);
            preparedStatement.setString(2,"666");
            //将SQL语句加入批处理包中
            preparedStatement.addBatch();
            //当有一千条语句时执行SQL语句
            if ((i+1)%1000 == 0) {
                preparedStatement.executeUpdate();
                //清空一次
                preparedStatement.clearBatch();
            }
        }
        //结束时间
        long end = System.currentTimeMillis();
        System.out.println(end - start);


        JDBCUtils.close(null,preparedStatement,connection);
    }
}

你可能感兴趣的:(MySql,java,mysql,数据库)