Java 将SXSSFWorkbook保存为blob的最佳方法?

Java 将SXSSFWorkbook保存为blob的最佳方法?,java,excel,hibernate,apache-poi,java-io,Java,Excel,Hibernate,Apache Poi,Java Io,我正在使用ApachePOI SXSSFWorkbook生成一个.xlsx excel电子表格,但我需要将该文件保存到blob中,而不是下载它。我还需要它能够放大,所以如果我有600000多条记录放入文件,我需要避免内存不足错误。这是密码 SXSSFWorkbook workbook = new SXSSFWorkbook(100); addContent(); 通常,当输出到文件时,我会执行以下操作 OutputStream output = response.getOutputStream

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

SXSSFWorkbook workbook = new SXSSFWorkbook(100);
addContent();
通常,当输出到文件时,我会执行以下操作

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

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

为了将来的参考,我最终将它放在一个文件中,然后从中读取

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会话获取LobHelper并从inputStream创建blob。性能正常,我只测试了25000条左右的记录,但没有内存问题。

根据@kiwiwings的建议,我有以下工作:

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

就是这样。

不确定在hibernate中blob是如何处理的,但至少标准blob api为您提供了一个为什么不通过TearrayOutputStream写入
ByteArrayOutputStream
然后调用
getBytes()
并将其传递到数据库?
ByteArrayOutputStream
将所有内容放入内存,这么大的文件可能不起作用。@kiwiwings如果我已经有一个blob,那可能会起作用,但我只有一个工作簿。