2

JExcel 2.6.9を使用して優れた結果セット(100,000行、45列)をWebアプリケーションから書き込もうとしています。

プロセスは次のように失敗します:

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ループでは、ResultSetfromデータベースが繰り返されてから

s.addCell(new Label(colIndex, rowIndex, value, format));行ごとに実行されます。

この問題をパスする方法がわかりません。このアプリケーションが実行されている環境にはメモリの制約があるため、他に方法がまったくない場合を除いて、JVMにより多くのRAMを割り当てることはできません。これについてのフィードバックをいただければ幸いです。ありがとう

4

2 に答える 2

2

X> Yの場合、Xポンドの物をYサイズのバッグに入れることはできません。

これは450万の値です。それらの多くが文字列であり、それぞれの平均サイズが1Kバイトである場合、最大4.5GBのデータがあります。

すべてを一度にメモリに保存すると、問題が発生します。解決策は、それを小さな断片にチャンクし、それらをコミットしてから、次のチャンクを作成することです。

一度にそれだけのデータが必要なWebクライアントはないかと思います。別の解決策は、のサイズを制限するためのより良いフィルタリング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 に答える