将SXSSFWorkbook保存到blob的最佳方法?

时间:2013-09-17 14:36:29

标签: java excel hibernate apache-poi java-io

我正在使用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的实用程序?

2 个答案:

答案 0 :(得分:2)

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

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

就是这样。

答案 1 :(得分: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 session来getLobHelper并从inputStream创建blob。性能还可以,我只测试了25,000左右的记录,但还没有内存问题。