jxl 溢出

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:24:18
本人在用jxl 和 oracle 数据库写一个小程序:要将任何可执行的SQL语句的结果保存到exceL中,并能够实现自动换页,由于SQL语句查询的结果可能是百W条,使用过程中出现“java.lang.OutOfMemoryError: Java heap space”错误,在不改变JVM的缓冲去大小的前提下有什么办法解决。目前是所有label都添加到sheet中后再执行book.write(),怎么改???回答好(甚至提供有用代码)追加分数,谢谢!!!!!

很遗憾的告诉你,没有办法根治这个问题,现在流行的操作excel的方法无外乎poi和jxl,我做过这两个的简单写测试,poi的效率和内存消耗都要大于jxl,但是OOM是两者都无法根本解决的问题,对于太大的Excel文件是肯定会出问题的,一般的通过-Xmx来指定最大的JVM内存可以在一定程度上解决问题。换用 BufferedInputStream并不能解决问题的,这两个(至少jxl我确定)是会将整个Excel文件读入内存的。即便是能够解决一个文件加载的问题,在并发数多的时候,系统还是会被down掉的,如果Excel简单只是单独的一行行数据的话,就用纯文本来加载吧。

还有另外一个折中的办法,将需要查询的结果用表的形式先存起来,就是执行create table tableName as(select ....),然后直接使用excel的导入外部数据就行了