2

我正在尝试使用 JExcel 2.6.9 将 Web 应用程序中的结果集(100,000 行,45 列)写入 excel。

该过程失败:

Caused by:
java.lang.OutOfMemoryError - Java heap space
at jxl.write.biff.WritableSheetImpl.getRowRecord(WritableSheetImpl.java:1179)

我尝试了以下方法:

        WorkbookSettings ws = new WorkbookSettings();
        ws.setLocale(new Locale("en", "EN"));
        ws.setUseTemporaryFileDuringWrite(true);

        WritableWorkbook workbook = Workbook.createWorkbook(new File("tempExcel.xls"),ws);

所以基本上在一个while循环中,ResultSet从数据库被迭代然后

s.addCell(new Label(colIndex, rowIndex, value, format));为每一行完成。

我不确定如何通过这个问题。运行此应用程序的环境中存在内存限制,因此除非绝对没有其他方法,否则简单地为 JVM 分配更多 RAM 不是一种选择。我将不胜感激对此的任何反馈。谢谢

4

2 回答 2

2

如果 X > Y,您不能将 X 磅的任何东西放入 Y 大小的袋子中。

那是 450 万个值。如果其中很多是字符串,每个平均大小为 1K 字节,那么您将拥有约 4.5GB 的数据。

如果你一下子把整件事都记在心里,那你就有麻烦了。解决方案是将其分块成更小的块,提交它们,然后创建下一个块。

我想知道是否有任何网络客户端一次需要这么多数据。另一种解决方案是更好地过滤以限制ResultSet.

于 2012-08-16T01:53:09.147 回答
0

我会看这个网页,尤其是第 8 章:

http://www.teamdev.com/downloads/jexcel/docs/JExcel-PGuide.html#AEN566

请记住,批量操作总是更好!

于 2012-09-17T22:38:28.833 回答