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

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

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

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

importjava.io.BufferedReader;importjava.io.IOException;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.Date;importcom.mysql.jdbc.Connection;public classMysqlBatchUtil {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() throwsClassNotFoundException, 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=newDate();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=newDate();

System.out.println("数量="+count);

System.out.println("运行时间="+(end.getTime()-begin.getTime()));

conn.close();

}public static voidmain(String[] args) {try{newMysqlBatchUtil().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秒 ,由此可见处理效率大大提高,呵呵,

注:文章是博主原创,转载请注明来源啊,谢谢亲!

mysql插入10万测试_[原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率相关推荐

  1. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: 通过使用addBatc ...

  2. 为何插入10万数据只需2秒

    文章目录 一.前言 二.问题 1.url后面useServerPrepStmts是什么? 2.url后面rewriteBatchedStatements是什么? 3.这两个参数对语句执行有什么影响? ...

  3. jaba窗体连接mysql增删改查_知识实现——Java使用jdbc连接MySql数据库,实现增删改查...

    Java使用jdbc连接MySql数据库,实现增删改查 首先,导入MySql连接数据库的jar包,我用的是 mysql连接jar包 DB类,用于获得数据库连接 import java.sql.Driv ...

  4. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  5. java通过jdbc访问mysql,update数据返回值的思考

    java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...

  6. 【Java】JDBC连接MySQL驱动

    获取驱动jar包 官网下载jar包导入工程 安装Java和安装MySQL这里就不说了,可以通过官网链接下载驱动. 注意如果是WindowsOS不要直接下Windows,那个不是JDBC,应该选上面的& ...

  7. idea如何给oracle添加数据_intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作...

    intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作 发布时间:2018-07-04 10:09, 浏览次数:2532 , 标签: intelij idea jav ...

  8. mysql插10万条数据_如何快速安全的插入千万条数据?

    点击上方 小伟后端笔记 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 最近有个需求解析一个订单文件,并且说明文件可达到千万条数据,每条数据大概在20个字段左右,每个字段使用逗号分隔,需要尽量在半 ...

  9. mysql数据库插入数据为空_用java向mysql数据库中插入数据为空

    利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util ...

最新文章

  1. php 所有魔术方法,PHP常用的魔术方法及规则
  2. android将拦截短信通过邮箱发送,网易邮箱Android客户端推出 加速布局移动互联网...
  3. SAP云平台架构概述
  4. 转:如何用gcc编译生成动态链接库*.so文件 动态库
  5. Almost Union-Find UVA - 11987(并查集的删除操作)
  6. 如何使用阿里云云解析API实现动态域名解析,搭建私有服务器
  7. [js] 写一个方法获取图片的方向
  8. php checkbox后台判断是否选中,jquery如何判断是否选中checkbox
  9. 学习Python的利器:内置函数dir()和help()
  10. wsdl2java工具生成客户端代码
  11. 偷梁换柱:谨防“Synaptics”蠕虫病毒
  12. 用dataX向PolarDB中导数据时,出现脏数据问题怎么解决
  13. 行业陷入“围城”效应,新茶饮品牌凛冬将至
  14. c语言vc是什么意思,这个VC语句是什么意思
  15. 天龙八部科举答题问题和答案(全6/8)
  16. 第三届江西省高校网络安全技能大赛 部分wpCrypto的疑惑
  17. XDOJ 233/237-字符串复制
  18. 简单理解:第一类错误,第二类错误,统计显著性,空假设和P值
  19. Java中的String长度限制
  20. 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其Python实现

热门文章

  1. IIS安装2个SSL_顶级域名0元撸-免费注册2个腾讯云域名 免费SSL证书
  2. echarts3 loading动画无法去除解决方案
  3. Ubuntu安装包时报错 E:Unable to locate package xxx(如:python3-pip)
  4. 怎样考计算机教师资格证书,非师专生怎么考取计算机教师资格证书?
  5. 【测试】用例设计思路-六方面
  6. 【数据仓库】OLTP系统和OLAP系统区别
  7. Servlet的学习之Request请求对象(2)
  8. OpenGl绘制螺旋线
  9. 用C#生成不重复的随机数
  10. 选择日期保存后日期变成前一天(avue date)