在我们更具POI导出数据时,碰到了需要导出几十万数据的文件,,,,根据POI的特点,我们知道 在创建工作薄时,HSSFworkbook 只支持大概6万数据的导出,而XSSFworkbook 支持100万数据导出,但是在实际使用中发现根本不可行,然后我们查询网络发现还有一个SXSSFworkbook 他在运行时会吧内存的对象保存到磁盘中,速度回有所降低,并且不能使用模板,
然而最后还是不能导出,,,,最后经过推演发现SXSSFworkbook  运行时会分两步,1.创建对象,2.读写内容,创建对象比读写内存块得多了。最后会导致崩溃,所以我们在代码中,写了一行代码close(rs, stmt, conn); ,主线程停一毫秒,
(性能优化:由于我们当时使用的项目框架是HSS,也会降低性能,所以我们直接用的jdbc连接数据库的)
public class POITest2 {public static void main(String[] args) throws Exception{String xlsFile = "c:/poiSXSSFDBBigData.xlsx";        //输出文件Workbook wb = new SXSSFWorkbook();                //创建excel文件,内存只有100条记录【关键语句】Sheet sheet = wb.createSheet("我的第一个工作簿");        //建立新的sheet对象Row nRow = null;Cell nCell   = null;//使用jdbc链接数据库Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();      String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";String user = "itheima";String password = "itheima";Connection conn = DriverManager.getConnection(url, user,password);   Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);   String sql = "SELECT * FROM CONTRACT_PRODUCT_C";       //100万测试数据ResultSet rs = stmt.executeQuery(sql);                          //bug 要分次读取,否则记录过多long  startTime = System.currentTimeMillis();    //开始时间System.out.println("strat execute time: " + startTime);//contextint rowNo = 0;int colNo = 0;while(rs.next()) {for(int i=0;i<5000;i++){colNo = 0;nRow = sheet.createRow(rowNo++);nCell = nRow.createCell(colNo++);nCell.setCellValue(rs.getString(colNo));nCell = nRow.createCell(colNo++);nCell.setCellValue(rs.getString(colNo));if(rowNo%100==0){System.out.println("row no: " + rowNo);}}Thread.sleep(1);            //休息一下,防止对CPU占用}long finishedTime = System.currentTimeMillis();    //处理完成时间System.out.println("finished execute  time: " + (finishedTime - startTime)/1000 + "s");FileOutputStream fOut = new FileOutputStream(xlsFile);wb.write(fOut);fOut.flush();fOut.close();long stopTime = System.currentTimeMillis();        //写文件时间System.out.println("write xlsx file time: " + (stopTime - startTime)/1000 + "s");close(rs, stmt, conn);}//close resourceprivate static  void close(ResultSet rs, Statement stmt, Connection conn ) throws SQLException{rs.close();   stmt.close();   conn.close();}    }

Poi百万数据导出问题相关推荐

  1. 解决POI大数据导出Excel内存溢出、应用假死

    最近公司一个06年统计项目在导出Excel时造成应用服务器内存溢出.假死现象:查看代码发现问题一次查询一整年的数据导致堆内存被撑爆(假死),随后改用批量查询往Excel中写数据,同样的问题又出现了!! ...

  2. Java,excel大量百万数据导出优化措施,SXSSFWorkbook流式、分批次导出示例

    在导出百万级的数据时,如果不采用适当的优化措施,确实可能会造成死机和内存崩溃等问题. 为避免这些问题,可以采用以下优化措施: 分批次读取数据:将需要导出的数据分成多个批次进行读取和写入,每次读取部分数 ...

  3. 使用POI进行数据导出excel时的OOM服务挂掉,cpu飙升的问题

    在日常工作中,经常可能会使用到poi来进行数据导出,但是在导出的过程中,如果对poi类使用不当,则可能会出现一些问题,比较严重,下面对poi中三种不同的类来进行说明. 1. HSSFWorkbook( ...

  4. Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...

    在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生 ...

  5. java poi 添加列数据_java使用POI将数据导出放入Excel

    本文主要是将数据库取出的数据按照自定义的行列格式导出到excel中,POI则是实现我们需求所用到的技术. POI介绍 使用spring boot导入相关依赖 获取数据(自行处理) 完整代码实例:创建e ...

  6. poi大数据导出的基本过程

    //初始化 FileOutputStream fos = null; SXSSFWorkbook sxssfWorkbook = null; // 导出的excel,全文件名 final String ...

  7. 使用poi将数据导出到excel

    1.依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...

  8. 【淘宝交易订单百万数据导出】C#快速汇出DataTable到Excel文件【已测试,正常运行】vs2017

    项目中需要将DataTable中的内容汇出到Excel文件中,采用循环的方式逐个Cell写数据到Excel文件中, 测试时发现很不好,汇出一个19列203行的Table时,用时竟然高达24秒多.[vs ...

  9. nodejs+exceljs百万数据导出

    整体思路:分页查询,利用首次查询的数据创建excel文件,将后续查询的数据添加到excel中 代码示例: //每次分页的limit const base = 10000; //查询第一批数据,写入ex ...

最新文章

  1. python中的匿名函数与lambda
  2. CentOS7编译安装MySQL5.7之后安装mysql-devel出错解决方案
  3. 【转】asp.net中的WebApplication(web应用程序)和WebSite(网站)
  4. 26条安全开车经验 开车20年老司机分享
  5. 动手试试Android Studio插件开发
  6. 优质计算机教案,信息技术优秀教案
  7. Stc8A Air720D联调,问题(已解决)
  8. html字体图标显示不出来,h5页面字体图标显示不正常
  9. 机器视觉实用工具集NO.15——利用图像放射变换做类似文件扫描仪效果工具
  10. 读书·2020(26本)
  11. web前端简单静态网页制作
  12. 青龙面板--花花阅读
  13. 电脑一般预装access吗_我告诉你惠普预装office是永久的吗
  14. 迅雷新财报背后:下载一哥到艰难求生
  15. 基于极化码(Polar Code)的加密
  16. 无法下载图片 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insec
  17. 百分之百还原《京东商城》项目实战1
  18. mysql查询数据的总记录数
  19. 程序猿,你的安全感呢?
  20. 回溯法,分支定界法求解n后问题

热门文章

  1. 带心形的CSS3动态菜单效果~花哨、个性!
  2. java超级素数算法_计算机二级VB基础之素数算法
  3. 网站整体优化其一:数据库优化同步的情况
  4. [凡客体]淘小鸡自我写真
  5. P4138 [JOISC2014] 挂饰 题解
  6. Oracle几种分页查询sql语句
  7. js replace替换字符串中某个指定字符
  8. lcd4linux亮度,Android LCD和键盘 背光亮度设置
  9. 由初速度和仰角求射程
  10. linux添加删除用户命令,Linux命令之useradd和userdel(添加、删除用户)