利用poi将excel表中数据读取存入mysql数据库(数据量比较大)

来源:互联网 发布:遗传算法参考书 编辑:程序博客网 时间:2024/05/22 13:42

最近被老大安排了一个任务,利用程序将excle表中的数据读取到,做处理,然后存进数据库。接到任务的时候人是懵逼的。但是安排的任务也得硬着头皮完成。现将做的东西记录如下,方便以后查询。

这个小demo的原型是在网上找的,demo链接如下

http://www.cnblogs.com/hongten/p/java_poi_excel.html

这个demo基本能够实现将excel中的数据读取然后存到mysql这个功能,但是,还远没有达到自己这个任务的业务要求。

我这个任务要求如下:

公司老大需要统计这一年中我们公司的机票销售情况,excel表格比较多,比较繁琐,他要求将这个一年中所有的机票销售情况存进mysql中,

数据库mysql中表结构如下


十二个月中其中某个月份的文件夹结构


某个月中某个平台的销售报表——总表(改签表在销售表中的sheet1中,退票报表是单独一个excle)


某个月中某个平台的销售报表——改签表


退票表中的excel数据结构(这个是所有平台的)


数据库里面的表字段和excel中表头基本一一对应,但是需要新加三个字段,source、refund、change

这里对着三个字段说明一下

source是平台来源,refund是退票(默认为0)、change是改签(默认为0)

不同的平台通过source来区分,当记录平台销售记录的excel中的总表(sheet0)中的订单号出现在改签表(sheet1)或者另外一个excel(退票表)中的时候,数据库中该订单号对应的改签或者退票的字段变为1。

总表中订单号会出现重复的情况,当重复的时候,存进数据库的时候订单号只取一条,但是过滤掉的那些订单号对应的姓名,票号要叠加,以逗号隔开。因为其他字段都是一样的,只取一个就行。

一般来讲,将相同的订单号合并后订单号都是唯一的,但是不同平台可能出现相同的订单号。这种情况本文没有考虑。

(也不太知道该怎么写,想到哪里就写到哪里了)

接下来就是项目结构


对项目结构和源码就不多解释了,

准备上传源码来着,但是编辑页面还不知道该怎么上传,待会儿单独上传。

最后说一下遇到的问题

1.最开始做的时候,网上找的demo只支持2003版的excel,如果是2007版,会报错。需要导入新的jar包。具体需要哪些jar包网上百度一大堆。就不记录了

2.刚开始做完后,大约两万条数据,导进数据库大概花了30分钟左右,这个,,,,,,就不多评价这个速度了。耗时这么久的原因就是我是单条插入数据库,需要频繁打开,关闭数据库连接。这个过程相当耗时,后来百度得到(http://blog.csdn.net/whucyl/article/details/20838079)优化方法。两万多条数据耗时只需要1分钟左右,这中间的时间差吓到我了。

大概就记录这么多,能力有限,欢迎指正其中的错误,源码链接:http://download.csdn.net/detail/rookie_s/9694373


0 0
原创粉丝点击