批处理的应用

批处理应用

基本介绍:

1.当需要成批插入或更新记录时,可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交事务更有效率

2.JDBC的批量处理语句包括下面方法

        addBatch():添加需要批量处理的SQL语句或参数

        executeBatch();执行批量处理语句

        chearBatch();清空批量处理包的语句

3.JDBC连接MySQL时,如果要使用批处理功能,请在url中添加参数(?rewriteBatchedStatements=true)

4.批处理往往和PreparedStatement一起搭配使用,可以减少编译次数,也可以减少运行次数,效率会提高很多

演示向admin02表中添加信息

package com.jh.batch_;

//演示java的批处理

import com.jh.jdbc.JDBCUtils;
import org.junit.jupiter.api.Test;

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

public class Batch_ {

    //传统方法,添加100条数据到admin02表中
    @Test
    public void noBatch() throws SQLException {
        //得到连接
        Connection connection = JDBCUtils.getConnection();
        //组织SQL语句
        String sql = "insert into admin02 values(null,?,?)";
        //创建预处理对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        System.out.println("开始执行...");
        //起始时间
        long start = System.currentTimeMillis();
        //添加100条信息
        for (int i = 0; i < 100; i++) {
            preparedStatement.setString(1,"cat" + i);
            preparedStatement.setString(2,"123");
            //执行
            preparedStatement.executeUpdate();
        }
        //结束时间
        long end = System.currentTimeMillis();
        System.out.println("传统方法耗时时间:" + (end - start));
        //关闭连接
        JDBCUtils.close(null,preparedStatement,connection);

    }

    //使用批处理方式添加数据
    @Test
    public void batch() throws SQLException {
        //得到连接
        Connection connection = JDBCUtils.getConnection();
        //组织SQL语句
        String sql = "insert into admin02 values(null,?,?)";
        //创建预处理对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        System.out.println("开始执行...");
        //起始时间
        long start = System.currentTimeMillis();
        //添加100条信息
        for (int i = 0; i < 100; i++) {
            preparedStatement.setString(1,"DOG" + i);
            preparedStatement.setString(2,"123");
            //将sql语句加入到批处理中
            preparedStatement.addBatch();
            //判断当有50条时,进行批量处理
            if((i+ 1) % 50 == 0){
                //进行批量处理
                preparedStatement.executeBatch();
                //清空批处理包
                preparedStatement.clearBatch();

            }

        }
        //结束时间
        long end = System.currentTimeMillis();
        System.out.println("批量处理方法耗时时间:" + (end - start));
        //关闭连接
        JDBCUtils.close(null,preparedStatement,connection);

    }

}

配置文件信息:

 

传统方法耗时: 

使用批处理方式耗时:

 批处理源码分析:

1.先创建ArrayList再调用elementData->Object[]

2.elementData->Object[] 会存放预处理的SQL语句

3.当elementData满后,将会按照原来的1.5倍进行扩容

4.当添加到指定的值后,就executeBatch来批量处理SQL语句

5.批量处理会减少发送SQL语句的网络开销,而且减少编译次数,因此效率将会提高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&jhan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值