java 导出excel百万级数据量

flyingfish1987 2011-07-13 09:56:53
jdbc操作oracle数据库,导出excel,要求10分钟内执行完毕,并下载到客户端;
现在问题是,执行生成excel文件时发生内存溢出,分析原因有可能是遍历resultset生成数据到excel时产生问题;
分批次生成excel文件只生成了第一次查询出的数据。
请求一个好的解决方案,并指点相应代码。
谢谢各位资深大虾!
...全文
1340 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 yanjinye 的回复:]
加一些条件,控制一次不能导出那么多,
查询百万数据都要时间的啊!
[/Quote]
现有代码可以实现10万左右导出,但时间比较长,20W以上会出现内存溢出,百万级数据只能分批查
随风醉舞 2011-07-13
  • 打赏
  • 举报
回复
加一些条件,控制一次不能导出那么多,
查询百万数据都要时间的啊!
随风醉舞 2011-07-13
  • 打赏
  • 举报
回复
靠,百万啊?5、6万就内存溢出了!
好像一个excel不能储存百万数据吧,
最多十万左右吧!
sunny110 2011-07-13
  • 打赏
  • 举报
回复
引用 13 楼 sunny110 的回复:
但是如果是电话号码如:05******,以excel打开会丢失前面的0

这个问题也遇到过,直接在宏中,转换成文字列就行



手动转毕竟太费劲了

谁给你说手动了。
我说的是,写一个宏自动转文字列
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xianaofei 的回复:]
首先你必须导入到多个EXCEL吧
查询出的数据用异步存储起来
你可以用开3-5个线程 同时处理 这样速度快
[/Quote]
单线程已经够费劲了,目前不考虑多线程,毕竟如果再来几个用户也要导呢?如果10个用户一起呢,100个的话就更不要提了,虽然用户不会太多,但还是有这个可能的
xianaofei 2011-07-13
  • 打赏
  • 举报
回复
首先你必须导入到多个EXCEL吧
查询出的数据用异步存储起来
你可以用开3-5个线程 同时处理 这样速度快
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 flyoversky 的回复:]
太疯狂了,百万级数据的EXCEL
[/Quote]

以后也许会有千万级或者上亿级的~ 悲催了~
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sunny110 的回复:]
但是如果是电话号码如:05******,以excel打开会丢失前面的0

这个问题也遇到过,直接在宏中,转换成文字列就行
[/Quote]

手动转毕竟太费劲了
flyoversky 2011-07-13
  • 打赏
  • 举报
回复
太疯狂了,百万级数据的EXCEL
sunny110 2011-07-13
  • 打赏
  • 举报
回复
但是如果是电话号码如:05******,以excel打开会丢失前面的0

这个问题也遇到过,直接在宏中,转换成文字列就行
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qingfeng_sakura 的回复:]
用excel打开百万级数据会疯掉的!!
[/Quote]
所以选择分文件导出
无所依赖 2011-07-13
  • 打赏
  • 举报
回复
用excel打开百万级数据会疯掉的!!
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunny110 的回复:]
这个问题可以解决
首先 生成TSV文件,让后把TSV拷贝到EXCEL2007中就可以了。

速度没有问题,已经测试过。
[/Quote]
但是如果是电话号码如:05******,以excel打开会丢失前面的0
sunny110 2011-07-13
  • 打赏
  • 举报
回复
这个问题可以解决
首先 生成TSV文件,让后把TSV拷贝到EXCEL2007中就可以了。

速度没有问题,已经测试过。
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 guowangsheng2011 的回复:]
你可以在服务器上生成多个excel,压缩后再到客户端
[/Quote]

这样太慢了,客户端显示是一直在查,要等很久,
我想实现一次查询生成一个文件,然后客户端收到后,其他文件陆续生成到客户端,按文件名+[0]/[1]/[2]的方式
一品 2011-07-13
  • 打赏
  • 举报
回复
你可以在服务器上生成多个excel,压缩后再到客户端
noway198199 2011-07-13
  • 打赏
  • 举报
回复
这个业务谁提出来的?那这个EXCEL还打得开吗?
flyingfish1987 2011-07-13
  • 打赏
  • 举报
回复
我现在是分文件,每次查询都是一个文件,一个文件5W数据量,但是生成到客户端只有第一次查询的一个文件
manyroads 2011-07-13
  • 打赏
  • 举报
回复
excel 2007 行数已经扩充很多啦
brightyq 2011-07-13
  • 打赏
  • 举报
回复
excel一个页签只能放6万多行。百万的要放到多少个页签里?
加载更多回复(13)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧