当前位置:网站首页>Four implementations of batch insert: have you really got it?
Four implementations of batch insert: have you really got it?
2022-08-01 03:06:00 【Joeyz efforts】
本文收录与专栏:《JDBC》专栏
专栏目的是解释JDBC的关键点,与各位一路同行,会持续输出,欢迎免费订阅!!
一、批量插入
Bulk insert is批量执行SQL语句
当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率
JDBCBatch processing statement include the following三个方法:
●addBatch(String)
:添加需要批量处理的SQL语句或是参数
●executeBatch()
:执行批量处理语句
●clearBatch()
:清空缓存的数据
Normally we will meet两种批量执行SQL语句的情况:
- 多条SQL语句的批量处理
- 一个SQL语句的批量传参
二、举例
举例:向数据表中插入20000条数据
数据库中提供一个goods
表:创建如下:
CREATE TABLE goods(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
实现方式一
使用Statement
Connection conn = JDBCUtils.getConnection();
Statement st = conn.createStatement();
for(int i = 1;i <= 20000;i++){
String sql = "insert into goods(name) values('name_' + "+ i +")";
st.executeUpdate(sql);
}
实现方式二
使用PreparedStatement
long start = System.currentTimeMillis();
Connection conn = JDBCUtils.getConnection();
String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1;i <= 20000;i++){
ps.setString(1, "name_" + i);
ps.executeUpdate();
}
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));//82340
JDBCUtils.closeResource(conn, ps);
实现方式三
- 使用
addBatch() / executeBatch() / clearBatch()
- mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持
?rewriteBatchedStatements=true 写在配置文件的url后面 - 使用更新的mysql 驱动:
mysql-connector-java-5.1.37-bin.jar
@Test
public void testInsert3() throws Exception{
long start = System.currentTimeMillis();
Connection conn = JDBCUtils.getConnection();
String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1;i <= 1000000;i++){
ps.setString(1, "name_" + i);
//1.“攒”sql
ps.addBatch();
if(i % 500 == 0){
//2.执行
ps.executeBatch();
//3.清空
ps.clearBatch();
}
}
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));//20000条:625 //1000000条:14733
JDBCUtils.closeResource(conn, ps);
}
实现方式四
In the way on the basis of three operation
使用Connection 的 setAutoCommit(false) / commit()
@Test
public void testInsert4() throws Exception{
long start = System.currentTimeMillis();
Connection conn = JDBCUtils.getConnection();
//1.设置为不自动提交数据
conn.setAutoCommit(false);
String sql = "insert into goods(name)values(?)";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1;i <= 1000000;i++){
ps.setString(1, "name_" + i);
//1.“攒”sql
ps.addBatch();
if(i % 500 == 0){
//2.执行
ps.executeBatch();
//3.清空
ps.clearBatch();
}
}
//2.提交数据
conn.commit();
long end = System.currentTimeMillis();
System.out.println("花费的时间为:" + (end - start));//1000000条:4978
JDBCUtils.closeResource(conn, ps);
}
The four way always forget,浅浅总结下,Hope will be useful~
边栏推荐
- 彻底关闭Chrome浏览器更新及右上角的更新提示
- IDEA调试
- Solve the problem that Excel opens very slowly after installing MySQL
- 【uniCloud】云对象的应用与提升
- Soft Exam Senior System Architect Series: Basic Knowledge of Information Systems
- MySQL modifies SQL statements to optimize performance
- win10 固定本机IP
- 设备树的树形结构到底是怎样体现的?
- High dimensional Gaussian distribution basics
- Raspberry pie arm version of GCC installed configuration and environment variables
猜你喜欢
Solve the problem that Excel opens very slowly after installing MySQL
RTL8762DK RTC (5)
Elastic Stack的介绍
IDEA调试
The fledgling Xiao Li's 112th blog project notes: Wisdom cloud intelligent flower watering device actual combat (1) - basic Demo implementation
ROS2 series of knowledge (4): understand the concept of [service]
ARM cross compilation
"Youth Pie 2": The new boyfriend stepped on two boats, and the relationship between Lin Miaomiao and Qian Sanyi warmed up
HCIP(15)
移动端页面秒开优化总结
随机推荐
【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 1981期】
New York University et al | TM-Vec: Template Modeling Vectors for Rapid Homology Detection and Alignment
MYSQL master-slave replication
Detailed explanation of TCP protocol
Dart 命名参数语法
785. 快速排序
每周小结(*67):为什么不敢发表观点
Elastic Stack的介绍
对无限debugger的一种处理方式
How to get started with YOLO?How to implement your own training set?
Game Security 03: A Simple Explanation of Buffer Overflow Attacks
简单易用的任务队列-beanstalkd
Nmap manuals - the full version
HCIP(15)
剑指offer专项突击版第16天
date command
初出茅庐的小李第114篇博客项目笔记之机智云智能浇花器实战(3)-基础Demo实现
黑客到底可以厉害到什么程度?
一个service层需要调用另两个service层获取数据,并组装成最后的数据,数据都是list,缓存如何设计?
设备树的树形结构到底是怎样体现的?