超级恶心的大批量数据导出到Excel
2010-07-14 16:11
253 查看
真无语了,咋那么多客户要导出数据到Excel?还都动不动就好几万条到几十万?导出了都看不看啊,真是倒霉催的。唉,牢骚一顿,进入正题。
业务功能比较简单就是把数据库内的数据,导出到Excel文件,文件里也没有什么修饰,比如颜色,底纹之类的啥都不带,纯数据文件,客户要拿这个文件查看,做些筛选之类的操作。
起初就是用poi,很简单的方式,生成Excel并输出到输出流,直接让用户下载。可惜好景不长,突然数据到了19w条,撑不住了,5万左右就内存溢出了,网上找了很多文章,基本上都无法搞定。
1.首先,poi和jxl这2个主要开发包,都是要把Excel放入内存,最后写文件的时候一起写入。所以写入之前所有的row,cell都在内存,不能释放,造成内存溢出。也因为以上原因,分次写入也是行不通的。
2.网上有篇文章“解决大批量数据导出Excel产生内存溢出的方案”,方法是生成一些小的临时文件,最后再合并为大文件,而且用了一些poi的二进制方式。但是使用以后,能处理的数据增加了一倍,但是还是难逃溢出的厄运。文章作者说可以避免溢出,但是我这确实不行。二进制写入的方式我是实在找不到文档,也作罢。
实在无奈,想起了很早以前,使用odbc操作Excel的方式,一试,还真行,不带溢出的。本来嘛,就是循环执行些sql语句,这要是再溢出,只能怪自己太烂了。如下
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};readOnly=false;DBQ=d://t.xls";
Connection con = DriverManager.getConnection(url);
连接好Excel后,直接insert,没错。url中readOnly=false是必须的,否则无法写入。至于sheet,可以使用poi或jxl建立,也能用数据库连接后的create table建立,方便得很。
有缺陷的话,就是只能在windows上运行,不能处理样式。终极解决方式还是bin模式。
还有一种方法,就是用XMl方式存储Excel,就是某些Excel特性不支持了,比如嵌入图片。
在此记录一下,备忘。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yys79/archive/2009/02/06/3866204.aspx
业务功能比较简单就是把数据库内的数据,导出到Excel文件,文件里也没有什么修饰,比如颜色,底纹之类的啥都不带,纯数据文件,客户要拿这个文件查看,做些筛选之类的操作。
起初就是用poi,很简单的方式,生成Excel并输出到输出流,直接让用户下载。可惜好景不长,突然数据到了19w条,撑不住了,5万左右就内存溢出了,网上找了很多文章,基本上都无法搞定。
1.首先,poi和jxl这2个主要开发包,都是要把Excel放入内存,最后写文件的时候一起写入。所以写入之前所有的row,cell都在内存,不能释放,造成内存溢出。也因为以上原因,分次写入也是行不通的。
2.网上有篇文章“解决大批量数据导出Excel产生内存溢出的方案”,方法是生成一些小的临时文件,最后再合并为大文件,而且用了一些poi的二进制方式。但是使用以后,能处理的数据增加了一倍,但是还是难逃溢出的厄运。文章作者说可以避免溢出,但是我这确实不行。二进制写入的方式我是实在找不到文档,也作罢。
实在无奈,想起了很早以前,使用odbc操作Excel的方式,一试,还真行,不带溢出的。本来嘛,就是循环执行些sql语句,这要是再溢出,只能怪自己太烂了。如下
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};readOnly=false;DBQ=d://t.xls";
Connection con = DriverManager.getConnection(url);
连接好Excel后,直接insert,没错。url中readOnly=false是必须的,否则无法写入。至于sheet,可以使用poi或jxl建立,也能用数据库连接后的create table建立,方便得很。
有缺陷的话,就是只能在windows上运行,不能处理样式。终极解决方式还是bin模式。
还有一种方法,就是用XMl方式存储Excel,就是某些Excel特性不支持了,比如嵌入图片。
在此记录一下,备忘。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yys79/archive/2009/02/06/3866204.aspx
相关文章推荐
- 超级恶心的大批量数据导出到Excel
- 超级恶心的大批量数据导出到Excel 分类: java 2010-07-14 16:11 866人阅读 评论(1) 收藏
- Java 使用stringTemplate导出大批量数据excel(百万级)
- Java 使用stringTemplate导出大批量数据excel(百万级)
- Java利用xml将大批量数据导出到excel的一个方法
- JAVA解决大批量导出数据到excel产生内存溢出的方案
- 大批量数据导出到Excel
- 解决大批量数据导出Excel产生内存溢出的方案
- Java大批量导出数据,格式可以为xml或excel
- POI : 解决大批量数据导出Excel产生内存溢出的方案
- ASP.NET大批量数据处理,97-2003Excel导入、导出
- 使用DTS导出到Access,FoxPro,Word ,Excel 不需要验证的大批量数据。
- 解决大批量数据导出Excel产生内存溢出的方案
- 转载——c# 大批量数据导出到excel[此为个人分享] [问题点数:20分,结帖人rocket2010]
- c# 大批量数据导出到excel
- c# 大批量数据导出到excel[1]
- SXSSFWorkbook 导出大批量数据和图片到excel
- 解决大批量数据导出Excel产生内存溢出的方案
- 解决大批量数据导出Excel产生内存溢出的方案
- Java大批量导出数据,格式可以为xml或excel