(转)大量数据与Excel交互的解决方案

一.导入生成Excel

原始的做法:

将数据加载到内存中,导入Excel,此方法的弊端:

1.大量数据加载到内存中,使机器变得缓慢

2.大量数据在导入Excel时形成大量cell对象产生OOM

在使用TOMCAT的情况下,JVM最高只能支持到2G内存,则会发生内存溢出的情况。此时的内存开销主要是两部分,一部分是大量数据加载到内存,另一部分是写入一个EXCEL时形成大量cell对象的开销。由于JVM的GC机制是不能强制回收的.

采用的方案是:将大量要导出的数据放入临时表分批次形成多个Excel文件后合并.说明:

1.大量要导出的数据放入临时表

大量数据有可能是在海量数据表里通过条件查询出来的,这样可以有效避免多次在海量数据中查询,提高了查询效率

2.分批次形成多个Excel

比形成一个Excel的多个sheet好,因为多个sheet形式需要将整个Excel加载到内存中,那么sheet越多,Excel越大.改多个SHEET页为多个EXCEL。通过多次生成,可以在后面EXCEL生成所需要的内存不足时,有效回收前面生成EXCEL时占用的内存。

3.将多个Excel合并

二.Excel导出入库

1.excel文件上传至服务器

2.采用eventusermodel方式读取excel数据,分块读取数据并批量入临时表

3.利用存储过程或其他纯sql语句来验证临时表(Temp1)中的数据

4.将验证失败数据放入存储至校验失败的临时表中(Temp2)

5.将临时表(Temp1)中的数据插入库表

http://www.iteye.com/topic/611329

相关推荐