- 浏览: 32515 次
- 性别:
- 来自: 南京
最新评论
最近在帮朋友做一个计时提醒系统,大致业务如下:
某保险公司有一批保险业务保存在Excel里面,这些数据主要包括用户名字、手机号、车牌号、保险到期时间等。需要在保险到期时间之前(到期时间前48天)由系统提醒业务员,通知业务员给用户打电话(当然也可以通过云配语音盒实现自动拨号通知,用户没有这个需求,我没有提醒)。
我的设计思路是先将Excel数据导入MySql数据库,然后通过sql语句查询出所有的数据,再计算当前日期与数据中的日期是否小于等于48,如果是,则在界面中打出这一条数据,否则不打。
理想很丰满,现实很骨感。遇到问题及解决思路如下:
【1】通过读取properties文件读取文件路径的时候老是报错,提示找不文件,config.properties文件配置如下:excelpath = "D:\\data.xls"
解决方法:通过反复对比,发现properties文件中读取的后面字段直接就是字符串,不需要家双引号,应该改成如下配置形式:excelpath = D:\\data.xls
【2】通过jxl.jar读取出Excel文件后,由于数据量大,采用了jdbc的批量插入,但是插入消耗的时间很长,有时候要10多分钟。
解决方法:网上查找资料,http://my.oschina.net/u/1452675/blog/203670?fromerr=rl3JiqtV 该网页原文如下:
照抄,问题解决
【3】当数据库的记录超过2500条的时候,一次全部读取会造成内存溢出,死机,程序崩溃。
解决方法:多线程分批次读取,每个线程每次只读200条
可能有待于改进的地方:
可以直接利用sql查询出48天之内的数据,而不用后续在Java中比对
某保险公司有一批保险业务保存在Excel里面,这些数据主要包括用户名字、手机号、车牌号、保险到期时间等。需要在保险到期时间之前(到期时间前48天)由系统提醒业务员,通知业务员给用户打电话(当然也可以通过云配语音盒实现自动拨号通知,用户没有这个需求,我没有提醒)。
我的设计思路是先将Excel数据导入MySql数据库,然后通过sql语句查询出所有的数据,再计算当前日期与数据中的日期是否小于等于48,如果是,则在界面中打出这一条数据,否则不打。
理想很丰满,现实很骨感。遇到问题及解决思路如下:
【1】通过读取properties文件读取文件路径的时候老是报错,提示找不文件,config.properties文件配置如下:excelpath = "D:\\data.xls"
解决方法:通过反复对比,发现properties文件中读取的后面字段直接就是字符串,不需要家双引号,应该改成如下配置形式:excelpath = D:\\data.xls
【2】通过jxl.jar读取出Excel文件后,由于数据量大,采用了jdbc的批量插入,但是插入消耗的时间很长,有时候要10多分钟。
解决方法:网上查找资料,http://my.oschina.net/u/1452675/blog/203670?fromerr=rl3JiqtV 该网页原文如下:
今天在做一个将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中比对
发表评论
-
javaTrim方法扩展:Trim掉指定字符
2017-01-04 09:45 563public static String myTrim(Str ... -
Java中使用C3P0连接池
2017-01-03 16:09 3141、c3p0.properties c3p0.driv ... -
Java四种线程池的使用
2016-12-23 17:25 463Java通过Executors提供四种线程池,分别为: new ... -
JAVA在线编译器模拟
2016-12-23 16:54 475有很多网站提供在线编 ... -
jvm内存分析
2016-12-23 09:26 357http://www.cnblogs.com/ITtangta ... -
面向对象三大基本特性,五大基本原则
2016-12-18 21:40 281透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. ... -
接口和抽象类有什么区别
2016-12-18 21:38 376接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? ... -
多线程轮流打印递增的数字
2016-12-18 21:28 617问题的描述 启动3个线程打印递增的数字, 线程1先打印1,2 ... -
SQL Case when 的使用方法
2016-12-15 09:39 384Case具有两种格式。简单Case函数和Case搜索函数。 ... -
使用Java线程并发库实现两个线程交替打印的线程题
2016-12-12 11:22 469背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一 ... -
推荐书目与知识点记录
2016-12-08 19:38 3551、Java序列化 2、线程通信:比如最简单的2个线程轮流 ... -
防火墙开启情形下,启动zookeeper问题解决
2016-12-08 19:36 1069接上一篇文章: 只需要在nimbus节点上用root账户 ... -
storm集群安装配置问题总结
2016-12-08 19:08 453【1】zookeeper集群配置问题 ... -
zookeeper删除节点
2016-12-08 16:07 697./zkCli.sh -server IP:2181 登录 ... -
zookeeper开启,关闭,查看状态等操作
2016-12-08 14:19 525http://aperise.iteye.com/blog ... -
storm之bolt定时给自己发送tuple
2016-12-07 13:26 288继承BasicRichBolt之后,实现如下方法: pu ... -
kafka基础入门
2016-12-06 09:39 474一、基本概念介绍 Kafk ... -
maven将工程打包成jar(包括依赖项)
2016-12-05 17:07 428[b]第一步:在你的pom.xml中添加 <plug ... -
maven初次使用问题记录
2016-03-15 21:59 425【1】下载安装 下载的免安装版本,直接配置maven_ho ... -
eclipse远程调试Tomcat方法
2016-03-15 19:18 5121、Linux中配置tomcat在catalina.sh中添 ...
相关推荐
内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...
excel数据批量导入数据库的小工具,节省你的时间
实现从Excel批量导入数据到MySQL 数据库中,可以同时导入多张Excel表,使用时在excel.table 中配置需要导入的表及可!
这个工具是之前写了做数据稽核用的工具,甲方发过来了几十个Excel表格,每个表格都有一百多万数据,必须导入数据库才能作分析,所以写了这个脚本用来导数据,做报表的可参考,改一下脚本中的数据库字段就能用了
spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库
php实现excle数据导入mysql数据库 可以实现页面形式的excel导入数据库,操作步骤就是把要导入的excel表格上传到服务上,然后再导入,只要改连库语句就可以了……
可以把excel数据批量导入mysql数据库中
thinkphp5下利用phpexcel把excel得数据导入到mysql数据库中
VBA 将Excel中的数据导入到MySQL数据库中 其中包括读取文件 ODBC连接等等
一个实现批量导入Excel到MySQL/Oracle数据库的工具 一个实现批量导入Excel到MySQL/Oracle数据库的工具 一个实现批量导入Excel到MySQL/Oracle数据库的工具 一个实现批量导入...
该项目使用Python Pandas将Excel文件导入MySQL。 然后,以编程方式将电子表格分为2个单独的工作表,分别分为Sheet1]:标识为身份验证和Sheet2]:员工记录。 快速开始 您必须熟悉Python熊猫并编写SQL查询才能执行该...
最近公司需要把excel数据导入到mysql,自己结合网上例子写的demo。sql,excel都有,需要的小伙伴可以看看
将Excel 表格数据批量导入数据库,带数据库、daoru.xls 、导入提交页面、导入后显示页面等 可以使用!代码为php语言 数据库 mysql
主要介绍了PHP上传Excel文件导入数据到MySQL数据库示例,可以将Excel的数据写入到MySQL数据库中,感兴趣的同学可以了解一下。
批量导入Excel数据到mysql数据库内,需更改配置文件中mysql连接方式,修改用户名和密码,随后可批量导入;
OA (ssh) 基本实现(poi 生成 Excel , struts2动态下载 mysql数据库文件) 学习笔记(含源代码) 借鉴 风中叶 老师的视频,写的文章,代码比较详实。 说了很多我的看法,和思考,做了充分的日志
主要介绍了Springboot上传excel并将表格数据导入或更新mySql数据库的过程 ,本文以Controller开始,从导入过程开始讲述,其中包括字典表的转换,需要的朋友可以参考下
jsp将excel数据导入到mysql数据库中
关键jar包:、poi-3.9.jar、poi-ooxml-3.9.jar 、org.springframework.web-3.1.3.release.jar实现Excel的导入模板下载、在模板文件填写后正常上传,数据同步到数据库。 内部包含的war包可以直接放到tomcat下运行与...