今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入。于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.executeBatch()。我原以为这样会很快,结果插入65536条数据一共花30多分钟,完全出乎我的意料。于是问了一下同事,他们在处理这种大批量数据导入的时候是如何处理的,发现他们也是用的jdbc批量插入处理,但与我不同是:他们使用了con.setAutoCommit(false);然后再preparedStatement.executeBatch()之后,再执行con.commit();于是再试,什么叫奇迹?就是刚刚导入这些数据花了半小时,而加了这两句话之后,现在只用了15秒钟就完成了。于是去查查了原因,在网上发现了如下一段说明:

* When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that

requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with

SET autocommit and COMMIT statements:

SET autocommit=0;

... SQL import statements ...

COMMIT;

第一次,正是因为没有setAutoCommit(false);那么对于每一条insert语句,都会产生一条log写入磁盘,所以虽然设置了批量插入,但其效果就像单条插入一样,导致插入速度十分缓慢。

部分代码如下:

String sql = "insert into table *****";

con.setAutoCommit(false);

ps = con.prepareStatement(sql);

for(int i=1; i<65536; i++){

ps.addBatch();

// 1w条记录插入一次

if (i % 10000 == 0){

ps.executeBatch();

con.commit();

}

}

// 最后插入不足1w条的数据

ps.executeBatch();

con.commit();

照抄,问题解决

【3】当数据库的记录超过2500条的时候,一次全部读取会造成内存溢出,死机,程序崩溃。

解决方法:多线程分批次读取,每个线程每次只读200条

可能有待于改进的地方:

可以直接利用sql查询出48天之内的数据,而不用后续在Java中比对

分享到:

2015-12-31 10:07

浏览 1450

分类:数据库

评论

excel导入mysql并批量查询_Excel导入MySql数据库批量操作相关推荐

  1. excel导入mysql并批量查询_EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改...

    Excel 大量数据导入到sqlserver生成临时表并将临时表某字段的数据批量更新的原表中的某个字段 1:首先要对EXCEL进行处理 列名改成英文,不要有多余的列和行(通过ctrl+shift 左或 ...

  2. 如何在Excel/WPS表格中批量查询顺丰快递信息?

    上期我们讲了如何在Excel/WPS表格中批量查询快递信息(还不知道的小伙伴可以看这里:https://zhuanlan.zhihu.com/p/541529548),由于顺丰快递的隐私保护,我们在查 ...

  3. 如何在Excel/WPS表格中批量查询快递信息?

    干电商的小伙伴们还在为如何批量查询快递物流信息发愁吗?别着急,这篇文章或许能够帮助到您. 首先给大家看一下查询的具体成果: 第一步:安装Excel网络函数库 网址:www.excelapi.com 第 ...

  4. java mysql 多表查询_解析Mysql多表查询的实现

    查询是数据库的核心,下面就为您介绍Mysql多表查询时如何实现的,如果您在Mysql多表查询方面遇到过问题,不妨一看. Mysql多表查询: CREATE TABLE IF NOT EXISTS co ...

  5. mysql怎么子查询_在mysql中如何进行子查询?

    在mysql中,子查询是指将一个查询语句嵌套在另一个查询语句中,可以在SELECT.UPDATE和 DELETE语句中配合WHERE子句进行实现,WHERE子句中语法格式为"WHERE (另 ...

  6. mysql中文模糊查询_解决MySQL中文模糊查询问题

    解决MySQL中文模糊查询问题: 我们在MySQL中进行中文模糊查询时,经常会返回一些与之不相关的记录,比如查找%a%时,返回的可能有中文字符,却没有a字符存在.对于此问题目前发现一种方法可以很方便解 ...

  7. mysql qps 索引查询_【MySQL】MySQL配置调优之 QPS/TPS/索引缓存命中率、innoDB索引缓存命中率、查询缓存命中率查看...

    运行中的mysql状态查看: 对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries) / s ...

  8. mybatisplus多表关联查询_Excel、MySQL、PowerBI、Python来告诉你 数据关联与联合不一样

    阅读提示 本内容为日常频繁使用的数据处理操作,不涉及底层技术问题,烦请爱钻牛角的杠精绕行. 本内容尽量简单直白.步骤详细,适合数据分析入门.特别喜欢技术语言的大佬们,可自行跳过. 在上一篇:Pytho ...

  9. excel 银行卡信息如何批量查询

    ​ 1.首先打开Excel软件,新建一个工作簿,然后点击[DIY工具箱] 2.点击[银行卡],选择[查询银行卡信息(按量付费)] ​ 3.点击[新建] 4.在弹出工作表格录入要查询的银行卡号 ​ 5. ...

最新文章

  1. php用什么工具调试代码,详细介绍利用开源的DebugBar工具调试PHP代码(图文)
  2. 会声会影背景轨中的所有效果和素材导出为html5格式导入不,如何解决会声会影导入导出的格式问题?...
  3. map-reduce 、map、reduce
  4. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十二)块程序
  5. Linux 命令行连接蓝牙
  6. c++打开图片查看器并查看图片
  7. 【场外衍生品系列】雪球结构定价研究
  8. Oracle VirtualBox 6.1.18 安装扩展包
  9. TideSec远控免杀学习二(Evasion模块+veil)
  10. ML机器学习基础的编程技巧:
  11. 投资银行理论与实务(二):证券的发行承销与交易
  12. 网站被恶意攻击了改怎么办?如何进行防护呢
  13. PHP程序员战地日记
  14. QNX系统的实时性分析-实时性能测试标准
  15. c语言stm8变量存储类型,STM8使用----STVD(COSMIC)定义变量指定其类型和位定义
  16. 谷歌浏览器chrome devtools 插件安装
  17. pip安装pytorch出现报错MemoryError
  18. 基于Halcon卡尺测量: Metrology批量测量矩形和圆
  19. 由于使用GoMonkey Patch后导致GoConvey命令不能正常运行测试用例解决方案
  20. 关于H264标准中变换与量化的理解

热门文章

  1. [附源码]计算机毕业设计JAVA房屋租赁管理系统
  2. 中国天气通android版,中国天气通(全国天气实时查询)
  3. 莫烦pytorch学习之问题记录与总结
  4. 推荐几种靠谱的离职原因回答策略
  5. Linux C 语言 Socket 聊天程序(一对一)收发消息采用多线程
  6. 怎么在 Windows 下生成 文档树 tree?
  7. 吴恩达深度学习编程作业报错解决方法汇总
  8. python文件整理程序_Python实现自动整理文件的脚本
  9. 【JY】代码|极简反应谱分析
  10. 管理MAC地址转发表