Java使用JDBC向MySQL数据库批次插入10W条数据(测试效率)

发布时间 - 2026-01-10 22:11:49    点击率:

使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?

在JDBC编程接口中Statement 有两个方法特别值得注意:

通过使用addBatch()executeBatch()这一对方法可以实现批量处理数据。

不过值得注意的是,首先需要在数据库链接中设置手动提交,connection.setAutoCommit(false),然后在执行Statement之后执行connection.commit()

import java.io.BufferedReader;
import java.io.IOException;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import com.mysql.jdbc.Connection;
public class MysqlBatchUtil {
 private String sql="INSERT INTO db_test (param1,param2,param3,param4,param5) VALUES (?,?,?,?,?)"; 
 private String charset="utf-8"; 
 private String connectStr="jdbc:mysql://localhost:3306/test";
 private String username="root"; 
 private String password="123456"; 
 private void doStore() throws ClassNotFoundException, SQLException, IOException { 
  Class.forName("com.mysql.jdbc.Driver"); 
  connectStr += "?useServerPrepStmts=false&rewriteBatchedStatements=true";//此处是测试高效批次插入,去掉之后执行时普通批次插入
  Connection conn = (Connection) DriverManager.getConnection(connectStr, username,password); 
  conn.setAutoCommit(false); // 设置手动提交 
  int count = 0; 
  PreparedStatement psts = conn.prepareStatement(sql); 
  String line = null; 
  Date begin=new Date();
  for(int i=0;i<=100000;i++){
   psts.setString(1, i+"param1"); 
   psts.setString(2, i+"param2"); 
   psts.setString(3, i+"param3"); 
   psts.setString(4, i+"param4"); 
   psts.setString(5, i+"param5"); 
   psts.addBatch();   // 加入批量处理 
   count++;  
  } 
  psts.executeBatch(); // 执行批量处理 
  conn.commit(); // 提交 
  Date end=new Date();
  System.out.println("数量="+count); 
  System.out.println("运行时间="+(end.getTime()-begin.getTime()));
  conn.close(); 
 } 
 public static void main(String[] args) {
  try {
   new MysqlBatchUtil().doStore();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

测试结果:

数量=100001
运行时间=4725

一共10W,执行时间一共花费 47 秒.

这个效率仍然不高,似乎没有达到想要的效果,需要进一步改进。

在MySQL JDBC连接字符串中还可以加入参数,

rewriteBatchedStatements=true

mysql默认关闭了batch处理,通过此参数进行打开,这个参数可以重写向数据库提交的SQL语句

useServerPrepStmts=false

如果不开启(useServerPrepStmts=false),使用com.mysql.jdbc.PreparedStatement进行本地SQL拼装,最后送到db上就是已经替换了?后的最终SQL.

在此稍加改进,连接字符串中加入下面语句(代码构造方法中去掉注释):

connectStr += "?useServerPrepStmts=false&rewriteBatchedStatements=true";

再次测试结果如下:

数量=100001
运行时间=1213

同样的数据量,这次执行只花费了12秒 ,由此可见处理效率大大提高,呵呵

以上所述是小编给大家介绍的Java使用JDBC向MySQL数据库批次插入10W条数据测试效率,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# jdbc  # 数据库批次插入数据  # Java并发编程多线程间的同步控制和通信详解  # Java并发编程之volatile与JMM多线程内存模型  # Java多线程之并发编程的基石CAS机制详解  # Java多线程并发编程和锁原理解析  # 深入理解Java多线程与并发编程  # Java 多线程并发编程提高数据处理效率的详细过程  # 在此  # 小编  # 的是  # 这一  # 还可以  # 执行时间  # 给大家  # 不高  # 重写  # 可以实现  # 所述  # 给我留言  # 感谢大家  # 提高效率  # 疑问请  # 有任何  # 有两个  # 不开启  # 关闭了  # 花费了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Blade模板引擎?(完整语法和示例)  文字头像制作网站推荐软件,醒图能自动配文字吗?  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel如何实现文件上传和存储?(本地与S3配置)  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  python中快速进行多个字符替换的方法小结  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel如何实现多对多模型关联?(Eloquent教程)  JS经典正则表达式笔试题汇总  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何在企业微信快速生成手机电脑官网?  网站页面设计需要考虑到这些问题  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  深圳网站制作培训,深圳哪些招聘网站比较好?  如何在宝塔面板创建新站点?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  公司网站制作价格怎么算,公司办个官网需要多少钱?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  微信小程序 HTTPS报错整理常见问题及解决方案  *服务器网站为何频现安全漏洞?  长沙企业网站制作哪家好,长沙水业集团官方网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  jQuery中的100个技巧汇总  中山网站制作网页,中山新生登记系统登记流程?  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在局域网内绑定自建网站域名?  在centOS 7安装mysql 5.7的详细教程  javascript中闭包概念与用法深入理解  如何在阿里云购买域名并搭建网站?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何批量查询域名的建站时间记录?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  微信小程序 canvas开发实例及注意事项  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何用5美元大硬盘VPS安全高效搭建个人网站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?