- 浏览: 34652 次
- 性别:
- 来自: 南京
最新评论
最近在帮朋友做一个计时提醒系统,大致业务如下:
某保险公司有一批保险业务保存在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 625public static String myTrim(Str ... -
Java中使用C3P0连接池
2017-01-03 16:09 3481、c3p0.properties c3p0.driv ... -
Java四种线程池的使用
2016-12-23 17:25 492Java通过Executors提供四种线程池,分别为: new ... -
JAVA在线编译器模拟
2016-12-23 16:54 510有很多网站提供在线编 ... -
jvm内存分析
2016-12-23 09:26 394http://www.cnblogs.com/ITtangta ... -
面向对象三大基本特性,五大基本原则
2016-12-18 21:40 308透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. ... -
接口和抽象类有什么区别
2016-12-18 21:38 406接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? ... -
多线程轮流打印递增的数字
2016-12-18 21:28 651问题的描述 启动3个线程打印递增的数字, 线程1先打印1,2 ... -
SQL Case when 的使用方法
2016-12-15 09:39 423Case具有两种格式。简单Case函数和Case搜索函数。 ... -
使用Java线程并发库实现两个线程交替打印的线程题
2016-12-12 11:22 498背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一 ... -
推荐书目与知识点记录
2016-12-08 19:38 3901、Java序列化 2、线程通信:比如最简单的2个线程轮流 ... -
防火墙开启情形下,启动zookeeper问题解决
2016-12-08 19:36 1103接上一篇文章: 只需要在nimbus节点上用root账户 ... -
storm集群安装配置问题总结
2016-12-08 19:08 488【1】zookeeper集群配置问题 ... -
zookeeper删除节点
2016-12-08 16:07 747./zkCli.sh -server IP:2181 登录 ... -
zookeeper开启,关闭,查看状态等操作
2016-12-08 14:19 561http://aperise.iteye.com/blog ... -
storm之bolt定时给自己发送tuple
2016-12-07 13:26 328继承BasicRichBolt之后,实现如下方法: pu ... -
kafka基础入门
2016-12-06 09:39 517一、基本概念介绍 Kafk ... -
maven将工程打包成jar(包括依赖项)
2016-12-05 17:07 464[b]第一步:在你的pom.xml中添加 <plug ... -
maven初次使用问题记录
2016-03-15 21:59 462【1】下载安装 下载的免安装版本,直接配置maven_ho ... -
eclipse远程调试Tomcat方法
2016-03-15 19:18 5411、Linux中配置tomcat在catalina.sh中添 ...
相关推荐
内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...
综上所述,C#实现Excel数据导入MySQL涉及到的主要技术点包括C#编程、Excel文件读取、数据库连接与操作、数据流处理以及性能优化。在实际操作中,需要根据具体需求和环境调整策略,确保程序的稳定性和效率。
然而,当需要将大量数据从Excel导入到数据库时,手动操作不仅耗时,还容易出错。本篇文章将详细讲解如何实现“Excel批量导入数据库”,以及利用小工具提高效率。 一、Excel与数据库的交互原理 Excel数据批量导入...
本篇文章将详细讲解如何利用Python工具实现Excel数据的批量导入到MySQL数据库,以及如何优化这一过程,使得几千万的数据能够在半小时内完成导入。 首先,我们需要了解Python中用于操作Excel的主要库——pandas。...
综上所述,实现“完整的上传,excel导入mysql数据库”涉及到一系列技术步骤,包括使用POI处理Excel文件,SpringMVC处理文件上传请求,分批导入和性能优化,以及数据库操作和错误处理。掌握这些技能对于构建高效且...
可以使用SpringBoot的`@SpringBootTest`注解和JUnit进行单元测试,模拟HTTP请求,验证Excel导入功能是否按预期工作。 6. **项目结构**: - 一个标准的SpringBoot项目通常包括`src/main/java`下的`main`和`test`...
本主题将深入探讨如何利用Python实现Excel数据一键导入MySQL数据库,以及如何从MySQL数据库中一键读取数据到Excel表格。 首先,我们需要了解Python中的两个关键库:`pandas`和`mysql-connector-python`。`pandas`是...
标题中的“将excel数据导入mysql数据库--Excel2Mysql工具”揭示了本次讨论的主要内容,即如何使用特定的工具——Excel2Mysql,将Excel表格中的数据高效地导入到MySQL数据库中。这是一个常见的数据迁移需求,特别是在...
本项目"java实现Excel数据导入到mysql数据库"旨在利用Java技术将Excel表格中的数据高效地导入到MySQL数据库,并且在数据库中存在相同数据时进行更新,同时也支持将数据库中的数据导出到Excel表中。这个过程涉及到多...
在IT行业中,将Excel文件的数据解析并导入到MySQL...以上就是“Java解析excel导入MySQL数据库”这一主题的主要技术细节。通过理解这些知识点,你可以根据自身需求定制和扩展这个功能,使其更加适应实际的工作场景。
本知识点主要围绕如何将Excel中的数据高效地导入到MySQL数据库进行讨论。 首先,我们需要理解Excel数据的格式。Excel表格通常包含多行多列的数据,每一行代表一个记录,每一列代表一种属性。这些数据可以通过VBA...
本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java Database Connectivity)用于与MySQL数据库进行交互。 首先,我们需要了解Apache POI库。这是一个...
很多数据库管理系统提供了图形化界面,如SQL Server的SSIS(SQL Server Integration Services)、MySQL的LOAD DATA INFILE等,可以设置数据源、目标表和映射规则,实现Excel到数据库的批量导入。 1. 使用SQL命令:...
本教程将详细介绍如何通过编程将Excel数据导入到MySQL数据库中,这对于数据备份和迁移具有重要意义。 首先,我们需要准备以下工具: 1. Excel文件:包含要导入的数据。 2. MySQL服务器:安装并配置好的数据库服务。...
在C#编程环境中,我们可以利用各种库来处理Excel文件,并将其数据导入到数据库系统,如MySQL或SQL Server。本文将详细讲解如何实现这个过程,主要包括以下几个步骤和涉及的知识点: 1. **安装必要的库**: - 对于...
值得注意的是,为了提高性能,可以考虑使用数据库提供的批量操作或数据流技术。 至于描述中提到的“空白数据实现自动填充”,这可能是指在导入时遇到空值,根据预设规则或已有数据进行填充。例如,如果某一列存在...
总结起来,将Excel数据导入MySQL数据库涉及到多个步骤,包括数据读取、数据库连接、结构创建、数据转换、数据导入以及错误处理。通过Delphi的编程能力和相关组件,我们可以构建一个高效且可靠的自动化工具来完成这个...
总结来说,使用WInform程序将Excel导入SQL Server数据库涉及多个步骤,包括设计用户界面、读取Excel、建立数据库连接、数据转换、批量插入和异常处理。这个过程需要对.NET编程、Excel操作以及SQL Server管理有深入的...