0

我正在使用 Apache POI SXSSFWorkbook 生成一个 .xlsx excel 电子表格,但我不需要下载它,而是需要将该文件保存到一个 blob 中。我还需要这个能够扩大规模,所以如果我有 600,000+ 条记录放入文件中,我需要避免内存不足错误。这是代码

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

通常当输出到文件时我会做类似的事情

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

但在这种情况下,我不需要它去文件,只需进入数据库上的 blob,除非没有办法将 SXSSFWorkbook 保存到 blob 中。我可以将工作簿保存到 OutputStream 并尝试将其保存到 blob 中,但通常您需要 inputStream。是否有将 outputStream 转换为 inputStream 的实用程序?

4

2 回答 2

2

使用@kiwiwings 的建议,我有以下工作:

Blob binario = Hibernate.getLobCreator(session).createBlob(new byte[0]);
SXSSFWorkbook excel = ...
excel.write(binario.setBinaryStream(0));

就是这样。

于 2017-07-17T19:29:44.437 回答
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 中使用休眠会话来获取 LobHelper 并从 inputStream 创建 blob。性能还可以,我只测试了 25,000 条左右的记录,但还没有内存问题。

于 2013-09-18T13:41:48.803 回答