0

Apache POI SXSSFWorkbook を使用して .xlsx Excel スプレッドシートを生成していますが、ダウンロードする代わりに、そのファイルを blob に保存する必要があります。スケールアップできるようにするためにもこれが必要なので、ファイルに 600,000 件以上のレコードを入れる場合は、メモリ不足エラーを回避する必要があります。これがコードです

SXSSFWorkbook workbook = new SXSSFWorkbook(100);
addContent();

通常、ファイルに出力するとき、私は次のようなことをします

OutputStream output = response.getOutputStream();
workbook.write(output);

ただし、この場合、SXSSFWorkbook を BLOB に保存する方法がないことを除いて、ファイルに移動する必要はありません。データベースの BLOB に移動するだけです。ワークブックを OutputStream に保存して、それを BLOB に保存しようとすることもできますが、通常は代わりに inputStream が必要です。outputStream を inputStream に変換するユーティリティはありますか?

4

2 に答える 2

0

将来の参考のために、私はそれをファイルに入れてから読み込んでしまいます。

OutputStream output = new FileOutputStream(file);
workbook.write(output);
workbook.dispose();
output.flush();
output.close();

InputStream input = new FileInputStream(file);
Blob blob = dao.saveInputStreamToBlob(input);

次に、DAO で hibernate セッションを使用して getLobHelper を実行し、inputStream から BLOB を作成します。パフォーマンスは問題ありません。25,000 レコードほどしかテストしていませんが、メモリの問題はまだありません。

于 2013-09-18T13:41:48.803 に答える