大家好,欢迎来到IT知识分享网。
百万数据,条记录,使用Apache POI导出,let‘s go…
首先分析两个问题:
1、何来百万数据?
2、百万数据导出过程中会遇到哪些问题?
(本文只记录了核心实验步骤)
Step1:
分析问题一,条记录,从哪里来,for循环?呵呵!只能借助数据库了,写数据库存储过程,借助数据库帮我们生成百万数据。
首先表结构:
写存储过程如下:
调用存储过程,产生大数据:
至此,测试数据准备结束。
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));}
执行结果:
完活,收工。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141143.html