JDBC之批处理

news2024/12/26 11:26:58

基本介绍

在这里插入图片描述
1.批处理
正常你要指向三行sql语句
就是
prepareStatement.execute(sql1)-发送-执行
prepareStatement.execute(sql2)-发送-执行
prepareStatement.execute(sql3)-发送-执行
一句一句发送然后指向,这样太麻烦
批处理就把sql1、sql2和sql3整合到一个集合中,直接发送给mysql
发送一遍,直接指向-效率更高
在这里插入图片描述
2.三个方法
添加批量sql语句-addBatch(),执行批量添加的sql语句-executeBatch(),清空之前批量添加的sql语句-clearBatch()
和Statement关联(调用)
3.使用批处理
!一定要在url后面加一个参数

?rewriteBatchedStatements=true

4.搭配preparedStatement编译次数少,运行次数也变小,效率提升很大

案例

不用批处理

就直接这样发送-执行-再发送-再执行
在这里插入图片描述
耗时将近10s在这里插入图片描述

使用批处理

package yuan.hsp.JDBC;

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

import org.junit.jupiter.api.Test;



public class 批处理 {
	@Test
	public void m1() throws ClassNotFoundException, SQLException {
		Class.forName("com.mysql.jdbc.Driver");
		
		Connection connection = DriverManager
				.getConnection("jdbc:mysql://localhost:3306/db02?rewriteBatchedStatements=true","root","123456");
		String sql="insert into admin values (?,?)";
		PreparedStatement prepareStatement = connection.prepareStatement(sql);
		for(int i=0;i<5000;i++) {
			prepareStatement.setString(1, "jack"+i);
			prepareStatement.setString(2, "666");
			//!将语句搞到批量处理包中-》看源码
			prepareStatement.addBatch();
			//当有1000条记录时候批量执行(这个数据量多时候写,不然那个容器也不是无限的)
			if ((i+1)%1000==0) {
				prepareStatement.executeBatch();//批量执行
				prepareStatement.clearBatch();//清空一下
			}
			
		}
		prepareStatement.close();
		connection.close();
	}

}

注意:1.写url记得加参数?rewriteBatchedStatements=true,不然不支持和原来效果差不多
2.可以在达到某一量级集中处理然后清空

在这里插入图片描述
这就是差距喽

源码分析

核心addBatch()
在这里插入图片描述
第一句if-如果还没有创建,创建一个ArrayList数组-this.batchedArgs
第二句for后面就是检查我们的?,我们给?赋的值然后重新组成语句
最后一句就是把我们第二步完的语句添加到
this.batchedArgs的elementdate数组中以字节数组保存(elementDate数组的元素是字节数组,存储我们的sql语句)
在这里插入图片描述
扩容底层按照ArrayList的扩容
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【头歌】链栈的基本操作及应用

第1关&#xff1a;链栈的基本操作任务描述本关任务是实现链栈的基本操作函数&#xff0c;以实现判断栈是否为空、求栈的长度、进栈、出栈以及获取栈顶元素等功能。相关知识链式存储的栈栈的链式存储结构是采用某种链表结构&#xff0c;栈的链式存储结构简称为链栈。 这里采用单…

oracle11g SAP测试机归档日志暴增排查(一)

现象是oracle11g空间一天很快就被归档日志增加的文件爆满了&#xff0c;空间没有&#xff0c;oracle也不正常&#xff0c;当然sap也出现异常了。 看空间是就是/oracle没有空间了&#xff0c;用du * -sh 很快找到oraarch下面日志文件几分钟内产生大量的归档日志文件。 1、因为是…

面试京东软件测试岗,收到offer后我却毫不犹豫拒绝了....

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是2年。我想说的是&#xff0c;但凡有点机会&#xff0c;千万别去外包&#xff01; 在深思熟虑过后&am…

隐式Makefile详解

工程: Makefile: 第1行:指定Makefile所在的当前路径赋值给宏定义ROOTDIR; 第2行:指定Makefile所在的当前路径下的lib文件夹路径赋值给LIB_DIR; 第3行:指定Makefile所在的当前路径下的include文件夹路径赋值给INCLUDE_DIR; 第4行:指定Makefile所在的当前路径下的bin文件…

花40天啃完这份微服务架构笔记,终于挺进腾讯T3,它太重要了

都2023年了 还没用过微服务吗&#xff1f; 面试的时候高并发回答的总是不能让面试官满意&#xff1f; 一个互联网项目究竟有多少细节&#xff1f; 网上搜了一堆秒杀系统方案&#xff0c;究竟真实的线上电商该怎么做&#xff1f; 你缺乏这两个字 实战 消除痛点 解决面试 …

debian开启root登录

Debian桌面系统,默认不允许root用户登录,需要通过修改相应的配置文件“/etc/pam.d/gdm3”和“/etc/gdm3/deamon.conf”,才能使root用户登录 1.debian开启root登录 1.1修改配置文件 1.使用我们安装debian系统时创建的普通用户登录到系统的桌面 2.点击activities搜索termi…

关于TCP的四次挥手介绍

一、什么是TCP的四次挥手在网络数据传输中&#xff0c;传输层协议断开连接的过程我们称为四次挥手二、四次挥手的具体细节1. 第一次挥手&#xff1a;Client将FIN置为1&#xff0c;发送一个序列号seq给Server&#xff1b;进入FIN_WAIT_1状态&#xff1b;2. 第二次挥手&#xff1…

Ceres安装与卸载以及新旧版本中的问题

Ceres在SLAM优化中常常会用到&#xff0c;简单记录一下关于Ceres的一些问题 1、Ceres安装 1.1、安装依赖项 sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev1.2、下载Ceres Ceres的下载地址为&#x…

苏嵌实训——day17

文章目录1.1 信号灯集函数接口1.semget2.semctl3.封装初始化函数4. semop二 网络编程2.1 为什么要学习网络编程2.2 发展2.2.1 ARPnet2.2.2 TCP/IP协议2.3 网络体系结构以及OSI开放系统互联模型2.4 TCP/IP协议族2.5 五层模型2.6 TCP和UDP的异同点2.7 函数讲解2.7.1 socket2.7.2 …

k8s快速入门、集群部署-62

一&#xff1a;k8s简介 Kubernetes 简称 k8s。是用于自动部署&#xff0c;扩展和管理容器化应用程序的开源系统。 1.1 官方文档 中文官网&#xff1a;https://kubernetes.io/zh/ 中文社区&#xff1a;https://www.kubernetes.org.cn/ 官方文档&#xff1a;https://kubernete…

利用钉钉机器人Webhook向钉钉群推送告警通知

一、配置钉钉群 1、新建一个接收通知的钉钉群 如下图&#xff0c;创建一个接收通知的钉钉群 选择项目群&#xff0c;点创建 输入群名称&#xff0c;右侧选择群成员&#xff0c;最后点击右下角的创建 2、对群进行设置 点群右上角的设置按钮 点击 “智能群助手” 点 “添加机器人…

常见测试案例汇总

作者&#xff1a;~小明学编程 文章专栏&#xff1a;测试开发 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 水杯的测试用例 功能性测试 界面测试 性能测试 兼容性测试 易用性测试 安全测试 电梯的测试用例 界面测试 功能测试 性能测试 兼容性…

明明加了唯一索引,为什么还是产生重复数据?

距离上次发稿 已经过去好久了&#xff0c; 开搞&#xff0c;2023第一稿&#xff1b; .还原问题现场 前段时间&#xff0c;为了防止商品组产生重复的数据&#xff0c;我专门加了一张防重表。 问题就出在商品组的防重表上。 具体表结构如下&#xff1a; 为了保证数据的唯一性&a…

《吴军数学通识讲义》读后感

先抛一个问题&#xff0c;一副扑克牌随机发牌&#xff0c;均匀发给三人&#xff0c;已知你手上有两张K&#xff0c;另外两张K&#xff0c;每人一张的概率大&#xff0c;还是分给一个人的概率大&#xff0c;或者这两种场景概率一样&#xff1f; 从小开始学数学&#xff0c;但毕业…

PostgreSQL实战之物理复制和逻辑复制(六)

目录 PostgreSQL实战之物理复制和逻辑复制&#xff08;六&#xff09; 6 延迟备库 6.1 延迟备库的意义 6.2 延迟备库部署 6.3 recovery_min_apply_delay参数对同步复制的影响 PostgreSQL实战之物理复制和逻辑复制&#xff08;六&#xff09; 6 延迟备库 延迟备库是指可以配…

Flink官方例子解析:Flink源码子项目flink-examples

1. 简介 很多朋友在学习Flink的时候都希望能有个demo代码来参考实践&#xff0c;于是在百度或者Google一顿搜索&#xff0c;虽然能找到很多demo代码&#xff0c;但是这些demo要么版本比较旧&#xff0c;要么代码不全&#xff0c;根本跑不通。 其实&#xff0c;Flink官网就提供…

10、矩阵分析

目录 一、向量和矩阵的范数运算 二、矩阵的秩 三、矩阵的行列式 四、矩阵的迹 五、矩阵的化零矩阵 六、矩阵的正交空间 七、矩阵的约化行阶梯形式 八、矩阵空间之间的夹角 MATLAB 提供的矩阵分析函数&#xff1a; 一、向量和矩阵的范数运算 (1)在MATLAB中&#xff0c;…

不平衡数据集的建模的技巧和策略

不平衡数据集是指一个类中的示例数量与另一类中的示例数量显著不同的情况。 例如在一个二元分类问题中&#xff0c;一个类只占总样本的一小部分&#xff0c;这被称为不平衡数据集。类不平衡会在构建机器学习模型时导致很多问题。 不平衡数据集的主要问题之一是模型可能会偏向多…

笔记本怎么录制屏幕?笔记本录屏有这一款就够了

为了携带方便&#xff0c;很多小伙伴都选择笔记本电脑作为自己学习和办公的工具。在使用笔记本时&#xff0c;我们有时需要对它进行屏幕录制&#xff0c;那你知道笔记本怎么录制屏幕吗&#xff1f;怎样才能又快又好地录制屏幕&#xff1f;今天小编就给大家带来一款能高效录制笔…

DBCO-SS-NH2,二苯并环辛炔-二硫键-氨基,DBCO-SS-amine

DBCO-SS-NH2,二苯并环辛炔-二硫键-氨基&#xff0c;DBCO-SS-amine 英文名称&#xff1a;DBCO-SS-NH2、DBCO-SS-amine 中文名称&#xff1a;二苯并环辛炔-二硫键-氨基 外 观: 浅黄色或白色固体 分子式: C23H25N3O2S2 分子量: 439.59 存储环境:尽可能储存在-20℃环境下&…