当前位置:网站首页><JDBC> 批量插入 的四种实现方式:你真的get到了吗?
<JDBC> 批量插入 的四种实现方式:你真的get到了吗?
2022-08-01 02:48:00 【努力的小鳴人】
本文收录与专栏:《JDBC》专栏
专栏目的是解释JDBC的关键点,与各位一路同行,会持续输出,欢迎免费订阅!!
一、批量插入
批量插入就是批量执行SQL语句
当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率
JDBC的批量处理语句包括下面三个方法:
●addBatch(String)
:添加需要批量处理的SQL语句或是参数
●executeBatch()
:执行批量处理语句
●clearBatch()
:清空缓存的数据
通常情况下我们会遇到两种批量执行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);
}
实现方式四
在方式三的基础上操作
使用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);
}
这四种实现方式总是忘,浅浅总结下,希望会有用~
边栏推荐
- What practical projects can machine learning beginners learn?
- 【消息通知】用公众号模板消息怎么样?
- test
- You need to know the TCP wave four times
- 数据中台建设(七):数据资产管理
- Basic use of vim - command mode
- 【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 1981期】
- Device tree - conversion from dtb format to struct device node structure
- Soft Exam Senior System Architect Series: Basic Knowledge of System Development
- Which interpolation is better for opencv to zoom in and out??
猜你喜欢
Introduction to machine learning how to?
【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 1981期】
Four ways the Metaverse is changing the way humans work
win10 固定本机IP
解决安装MySQL后,Excel打开很慢的问题
开源项目站点必备&交流区功能
leetcode: 1648. Color ball with decreasing sales value [Boundary find by two points]
leetcode:1562. 查找大小为 M 的最新分组【模拟 + 端点记录 + 范围合并】
Game Security 03: A Simple Explanation of Buffer Overflow Attacks
RTL8762DK uses DebugAnalyzer (four)
随机推荐
MySQL modifies SQL statements to optimize performance
[uniCloud] Application and Improvement of Cloud Objects
MYSQL Classic Interview Questions
Soft Exam Senior System Architect Series: Basic Knowledge of Information Systems
787. Merge Sort
The IDEA can't find or unable to load The main class or Module "*" must not contain The source root "*" The root already belongs to The Module "*"
Inheritance Considerations
JS new fun(); 类与实例 JS基于对象语言 只能通过书写构造函数充当类
MYSQL logical architecture
device node结构体转换成platform_device结构体
树莓派 的 arm 版的 gcc 安装 和环境变量的配置
设备树的树形结构到底是怎样体现的?
Summary of MVCC
win10 固定本机IP
[cellular automata] based on matlab interface aggregation cellular automata simulation [including Matlab source code 2004]
元宇宙改变人类工作模式的四种方式
【SemiDrive源码分析】系列文章链接汇总(全)
设备树——dtb格式到struct device node结构体的转换
TCP协议详解
带你体验一次类型编程实践