【JDBC】连接数据库,执行批处理操作。

CSDN话题挑战赛第2期
参赛话题:学习笔记

在这里插入图片描述

【JDBC】连接数据库,执行批处理操作。_第1张图片

求关注⚽ 作者 .29. 的✔博客主页✔

JDBC专栏

(点击进入专栏)
【1】idea添加mysql-jar包
【2】使用IDEA连接数据库,执行增删改操作。
【3】IDEA连接数据库,执行查询操作,返回结果集并输出。
【4】JDBC实战 水果库存系统 [设计阶段]
【5】 水果库存系统 [功能实现①](接口实现类FruitDAOImpl)
【6】 水果库存系统 [功能实现②] 功能完善+使用效果
【7】 水果库存系统 [代码优化]
【8】连接数据库,执行批处理操作。
【9】数据库连接池:德鲁伊druid的使用


批处理

  • JDBC专栏
  • 一、什么是批处理
  • 二、怎么使用批处理
    • 1.在通信地址中设置参数(批处理第一步)
    • 2.连接数据库,预处理,参数填充
    • 3.进行批处理操作 (批处理第二步)
    • 4.关闭资源
  • 三、完整代码

一、什么是批处理

批处理操作,也就是采用JAVA的批量更新机制,使用批量更新机制可以将多条语句一次性提交给数据库进行批量处理,而不用逐条提交。



二、怎么使用批处理

1.在通信地址中设置参数(批处理第一步)

想要使用批处理操作,我们需要在连接数据库的通信地址(URL)中添加参数:rewriteBatchedStatements

实际操作中需要将参数rewriteBatchedStatements设置为true

String URL = "jdbc:mysql://localhost:3306/fruitdb?rewriteBatchedStatements=true";

需要注意的是,通信地址URL中首次添加参数需要在参数开头添加符号?,后续添加参数则用符号&连接。


2.连接数据库,预处理,参数填充

接下来就是连接数据库的常规的流程了(当复习一下):
。。。
除URL外,我们还需要准备 用户名 以及 密码

String USER = "root" ; //用户名
String PSW = "123456" ;//密码

。。。

加载驱动

String DRIVER = "com.mysql.cj.jdbc.Driver";
//加载驱动
Class.forName(DRIVER);

使用驱动管理器连接数据库

//数据库管理器,连接数据库
connection = DriverManager.getConnection(URL, USER, PSW);

编写SQL语句
(以插入操作为例)

String sql = "insert into t_fruit values(0,?,?,?,?)";

创建预处理对象

//创建预处理命令对象
PreparedStatement psmt = connection.prepareStatement(sql);

填充占位符 ?

psmt.setString(1,"石榴"+i);
psmt.setInt(2,8);
psmt.setInt(3,64);
psmt.setString(4,"石榴,在广东也可以叫鸡屎果");

3.进行批处理操作 (批处理第二步)

在一开始,我们先了解一下批处理要用到的方法。

批处理方法(API):
addBatch():添加需要批处理的SQL语句;
executeBatch():执行批处理语句;
clearBatch():清空批处理包的语句;

批处理4000个SQL语句,我们满1000个SQL语句执行一次,然后清空任务列表再继续。

        for(int i = 0;i < 4000;++i){
            psmt.setString(1,"石榴"+i);
            psmt.setInt(2,8);
            psmt.setInt(3,64);
            psmt.setString(4,"石榴,在广东也可以叫鸡屎果");
            //批处理操作
            psmt.addBatch();
            if(i % 1000 == 0){//如果任务繁多,分批次执行,每次执行完清空任务列表
                psmt.executeBatch();
                psmt.clearBatch();
            }
        }

4.关闭资源

        //释放资源(关闭连接,先关闭psmt,再关闭connection)
        psmt.close();       //关闭预处理对象
        connection.close(); //关闭连接对象


三、完整代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * @author .29.
 * @create 2022-09-15 21:49
 */
public class Demo01Batch {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
    String URL = "jdbc:mysql://localhost:3306/fruitdb?rewriteBatchedStatements=true";
    String USER = "root" ; //用户名
    String PSW = "123456" ;//密码
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //批处理操作一、添加参数rewriteBatchedStatements
        //2.通过驱动管理器连接对象:如果需要执行批处理任务,需要添加参数rewriteBatchedStatements=true
        //url表示跟数据库通信的地址
        //如果url中需要带参数,使用?连接
        //如果需要带多个参数,第二个参数开始用&连接

        String sql = "insert into t_fruit values(0,?,?,?,?)";

        //创建预处理命令对象
        PreparedStatement psmt = connection.prepareStatement(sql);
        //填充参数
        for(int i = 0;i < 10;++i){
            psmt.setString(1,"石榴"+i);
            psmt.setInt(2,8);
            psmt.setInt(3,64);
            psmt.setString(4,"石榴,在广东也可以叫鸡屎果");
            //批处理操作二
            psmt.addBatch();
            if(i % 1000 == 0){//如果任务繁多,分批次执行,每次执行完清空任务列表
                psmt.executeBatch();
                psmt.clearBatch();
            }
        }

        //释放资源(关闭连接,先关闭psmt,再关闭connection)
        psmt.close();
        connection.close();
    }
}

求关注⚽ 作者 .29. 的✔博客主页✔

【JDBC】连接数据库,执行批处理操作。_第2张图片

你可能感兴趣的:(JDBC,数据库,java,intellij-idea,sql)