MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率
1.当需要成批插入或者更新记录时。可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。
2.JDBC的批量处理语句包括下面两个方法:
- addBatch(String):添加需要批量处理的SQL语句或是参数;
- executeBatch():执行批量处理语句
通常我们会遇到两种批量执行SQL语句的情况:
- 多条SQL语句的批量处理
- 一个SQL语句的批量传参
代码(3种批量处理方式对比):
package com.litian.jdbc; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement; /**
* @author: Li Tian
* @contact: litian_cup@163.com
* @software: IntelliJ IDEA
* @file: JDBCTest4.java
* @time: 2020/4/4 14:18
* @desc: |批量处理事务
*/ public class JDBCTest4 { public static void main(String[] args){
// testStatement();
testPrepareStatement();
} /**
* 向数据库的数据表中插入10w条记录
* 测试如何插入,用时最短
* 1. 使用Statement:15038
*/
public static void testStatement() {
Connection conn = null;
Statement st = null;
String sql = null;
try {
conn = JDBCTools.getConnection();
JDBCTools.beginTx(conn);
st = conn.createStatement(); long begin = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
sql = String.format("insert into t_user2(username, pwd) values(name_%d, 6666)", i);
st.executeUpdate(sql);
}
long end = System.currentTimeMillis();
System.out.println(end - begin); JDBCTools.commit(conn);
} catch (Exception e) {
e.printStackTrace();
JDBCTools.rollback(conn);
} finally {
JDBCTools.release(null, st, conn);
}
} /**
* 向数据库的数据表中插入10w条记录
* 测试如何插入,用时最短
* 2. 使用PreparedStatement:13131
* 3. 在2的基础上使用批量处理:24596?这就很尴尬了
*/
public static void testPrepareStatement() {
Connection conn = null;
PreparedStatement st = null;
String sql = null;
try {
conn = JDBCTools.getConnection();
JDBCTools.beginTx(conn);
sql = "insert into t_user2(username, pwd) values(?,?)";
st = conn.prepareStatement(sql); long begin = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
st.setString(1, "name_" + i);
st.setString(2, "6666");
st.executeUpdate(); // “积攒”sql语句
st.addBatch();;
// 当积攒到一定程度,就统一地执行一次,并且清空先前积攒的sql
if((i + 1) % 300 == 0){
st.executeBatch();
st.clearBatch();
}
} // 若总条数不是批量数值的整数倍,则还需要额外再执行一次
if(100000 % 300 != 0){
st.executeBatch();
st.clearBatch();
} long end = System.currentTimeMillis();
System.out.println(end - begin); JDBCTools.commit(conn);
} catch (Exception e) {
e.printStackTrace();
JDBCTools.rollback(conn);
} finally {
JDBCTools.release(null, st, conn);
}
}
}
————————————————
版权声明:本文为CSDN博主「李英俊小朋友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21579045/article/details/105386353
MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率的更多相关文章
- 50个SQL语句(MySQL版) 问题十四
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- JavaWeb学习笔记(十四)—— 使用JDBC处理MySQL大数据
一.什么是大数据 所谓大数据,就是大的字节数据,或大的字符数据.大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据 ...
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
mysql 批量更新与批量更新多条记录的不同值实现方法 在mysql中批量更新我们可能使用update,replace into来操作,下面详细介绍mysql批量更新与性能. 批量更新 mysql更新 ...
- Python - MySQL - mysql-connector -第二十四天
序言 搭建MySQL环境MySQL Server. 请参考:https://blog.csdn.net/m0_37788308/article/details/79965378 或者 https:// ...
- MySQL学习笔记十四:优化(1)
SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...
- mysql概要(十四)索引(补充:外键级联操作)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ][ ON UPDATE { NO ACTION | CASCADE | SE ...
- MYSQL数据库学习十四 存储过程和函数的操作
14.1 为什么使用存储过程和函数 一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句. 存储过程和函数的优点: 允许标准组件式编程,提高了S ...
- mysql概要(十四)(二)索引(补充:外键级联操作)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | S ...
- MySQL的高可用实现:MySQL系列之十四
MySQL的高可以有三种实现方式:多主模式(Multi Master MySQL),MHA(Master High Availability)和 Galera Cluster:wresp 一.MHA ...
随机推荐
- 并行处理框架Celery的Web监控管理服务-Flower
安装和使用 使用pip安装Flower: $ pip install flower或 pip install flower -U -i https://pypi.tuna.tsinghua.edu.c ...
- Quartz SpringBoot 简单整合一下
一次简单的代码整合记录. 数据库准备 如果是MySQL可能出现一些小问题.比如联合主键长度超限制,已经记录解决办法了. CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NA ...
- MySQL ORDER BY:对查询结果进行排序
在 MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY {<列名> | <表达式> | ...
- php 判断设备是手机还是平板还是pc
1 <?php 2 //获取USER AGENT 3 $agent = strtolower($_SERVER['HTTP_USER_AGENT']); 4 5 //分析数据 6 $is_pc ...
- 布局之: flex(CSS3新增)
flex 基本概念 flex布局(flex是flexible box的缩写), 也称为弹性盒模型 .将属性和属性值(display:flex; )写在哪个标签样式中,谁就是 容器:它的所有子元素自动成 ...
- 三角函数与缓入缓出动画及C#实现(图文讲解)
日常经常能看到缓入缓出的动画效果,如: 1,带缓入缓出效果的滚动条: 2,带缓入缓出效果的呼吸灯: 像上面这种效果,就是用到了三角函数相关的知识,下面将从头开始一步步去讲解如何实现这种效果. 一.基础 ...
- Windows7/10实现ICMP(ping命令)
如果觉得本文如果帮到你或者你想转载都可以,只需要标注出处即可.谢谢 利用ICMP数据包.C语言实现Ping命令程序,能实现基本的Ping操作,发送ICMP回显请求报文,用于测试—个主机到只一个主机之间 ...
- 我是如何从零学习开发一款跨平台桌面软件的(Markdown编辑器)
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 原始冲动 最近一 ...
- DataOutputStream是用来处理什么类型数据的
FileOutputStream f=new FileOutputStream(new File("sa.txt")); DataOutputStream do=new DataO ...
- 【论文笔记】Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition
地址:https://arxiv.org/pdf/2006.11538.pdf github:https://github.com/iduta/pyconv 目前的卷积神经网络普遍使用3×3的卷积神经 ...