1048576玩转 百万数据POI导出

1048576玩转 百万数据POI导出百万数据 条记录 通过 ApachePOI 导出 精彩马上呈现首先分析两个问题 1 何来百万数据 2 百万数据导出过程中会遇到哪些问题 OK 读者 来吧 让我们一起解决以上两个问题 问题解决了 我们的大功也就告

大家好,欢迎来到IT知识分享网。

百万数据,条记录,使用Apache POI导出,let‘s go…

首先分析两个问题:

1、何来百万数据?

2、百万数据导出过程中会遇到哪些问题?


(本文只记录了核心实验步骤)

Step1:

分析问题一,条记录,从哪里来,for循环?呵呵!只能借助数据库了,写数据库存储过程,借助数据库帮我们生成百万数据。

首先表结构:

1048576玩转 百万数据POI导出


写存储过程如下:

1048576玩转 百万数据POI导出

调用存储过程,产生大数据:

1048576玩转 百万数据POI导出

至此,测试数据准备结束。


Step2:

思维过程第一步:

因为导出的是百万数据,Excel2003的一个sheet最多只能有65535行,255列,而Excel2007+版本的一个sheet中最多可以有行, 1.6万列。因此摒弃了操作Excel2003的HSSFWorkbook,而使用XSSFWorkbook。

思维过程第二步:

使用XSSFWorkbook导出数据,所有数据都是先读到内存,再写到硬盘,由于数据量太大,JVM虚拟机宕了,这就类似于想一次性把”一大缸的水“(数据库中的记录)取出,不过没有这么大的容器,就必然要Exception in thread “main” java.lang.OutOfMemoryError: Java heap space。

思维过程第三步:

另谋它法——临时文件,将内存中的数据写到硬盘中的临时文件中,避免了所有数据都放在内存中,使用类SXSSFWorkbook。get it !


思维3实现:

导入jar包
核心包:
poi-3.9-.jar
poi-ooxml-3.9-.jar
poi-ooxml-schemas-3.9-.jar
依赖包:
commons-beanutils-1.7.0.jar
commons-collections-3.0.jar
commons-lang-2.0.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
standard-1.0.2.jar
stax-api-1.0.1.jar
xmlbeans-2.3.0.jar
mysql-connector-java-5.1.10-bin.jar

核心代码:

String xlsFile = “D:/bigData/100W.xlsx”;

Workbook wb = new SXSSFWorkbook(100);  //创建excel文件。导出数据时,内存只保留100条记录【关键语句】

Sheet sheet = wb.createSheet(“百万数据POI导出”);

…………

while(rs.next()) {  

colNo = 0;
nRow = sheet.createRow(rowNo++);
nCell = nRow.createCell(colNo++);
nCell.setCellValue(rs.getString(colNo));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(rs.getString(colNo));

}

执行结果:

1048576玩转 百万数据POI导出

1048576玩转 百万数据POI导出

完活,收工。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141143.html

(0)
上一篇 2025-05-21 19:15
下一篇 2025-05-21 19:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信