首页 文章

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

提问于
浏览
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的实用程序?

2 回答

  • 2

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

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

    就是这样 .

  • 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左右的记录,但还没有内存问题 .

相关问题