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 ...
随机推荐
- 双剑合璧 Nacos 结合 Sentinel 实现流量安全控制
Alibaba Sentinel 是一款高性能且轻量级的流量控制.熔断降级解决方案.是面向分布式服务架构的高可用流量控制组件. Sentinel 官网:https://sentinelguard.io ...
- mysql域名解析引起的远程访问过慢?
MYSQL远程连接速度慢的解决方法 PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是, 默认安装的MYSQL开启了DNS的反 ...
- MySQL数据库基础知识复习
现在是2020年寒假,这也是新年写的第一篇博客,用了十几天的时间自学了数据库基础部分,想总结一下得失同时并通过写博客来复习前面学的知识点. 个人: 1.本来是计划一周学完基础部分的178p但没能完成这 ...
- ios swift 知识点记录
1. 定义变量 var name = "***" 定义常量 let name ="*****" 2. swift 变量类型 String, Int, Fl ...
- JSONobject按照put顺序存储和读取
new的时候加true即可: JSONObject jsonObject = new JSONObject(true);
- 【JMeter_02】JMeter目录结构与功能模块介绍
安装包目录结构 1.backups: 存放jmeter对脚本的自动备份保存文件 2.bin:jmeter的可执行文件目录,包含启动.配置等相关文件 3.dosc:程序自带的官方文档本地存放目录 4.e ...
- web scraper无法解决爬虫问题?通通可以交给python!
今天一位粉丝的需求所涉及的问题值得和大家分享分享~~~ 背景问题 是这样的,他看了公号里的关于web scraper的系列文章后,希望用它来爬取一个网站搜索关键词后的文章标题和链接,如下图 按照教程, ...
- 数据库事务(2)---ACID与并发问题
事务 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).在计算机术语中,事务通常就是指数据库事务. 概念 一 ...
- springboot 集成mybatis时日志输出
application.properties(yml)中配置的两种方式: 这两种方式的效果是一样的,但是下面一种可以指定某个包下的SQL打印出来,上面这个会全部的都会打印出来.
- android 中IntentService的使用场景
IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,当任务执行 ...