2012-10-12 68 views
1

我需要将表格导出到CSV文件中,并通过我的JSF/Icefaces Web应用程序下载它。从数据库导出大量数据到CSV

我该怎么做?我有一个包含20列以上和10多个MIO行的表格。

目前,我使用Java Thread将所有数据加载到RAM中。然后我创建一个新的File并将Collection的写入行迭代到文件中。如果线程完成,用户可以通过Servlet下载大文件。

但我不想写这么多GB到公羊。我不能安全,不会得到一个内存问题..

hibernate是否有可能为我做?还是有人有其他想法?

Im连接到DB2数据库。我想要导出的表连接到一个hibernate bean,但也可以编写原生sql。

谢谢你的回应!

回答

1

我也经历了类似的问题,我解决问题的方式是,我最初在光盘上写入CSV文件,并从数据库中获取25K批记录并保存到文件中,然后迭代重复该过程直到报告所需的所有数据不会写入文件中。 然后将文件URL发送到客户端以下载文件。

+0

Hibernate Batcher似乎是一个很好的选择。我仍然使用它来导入大量数据:)但是Hibernate仍然没有用于导出到文件的内置选项?使用MySQL我很容易可以使用本机“LOAD FROM FILE” - 方法。 DB2 Driver似乎不支持这样的解决方案。谢谢! – Nils

3

你需要文件的中间阶段吗?您是否尝试过从数据库加载并写入您的servlet输出流每行?这样你就可以简单地作为客户端和数据库之间的管道。

只需简单地设置您的content-disposition标题,并且它会通知客户端的浏览器将传入数据本身视为CSV文件。

+0

这是个好主意。也许阅读间隔50000个数据集直接写入响应?但是,我需要锁定表格以防止操纵数据? – Nils

+0

我期望一个简单的选择*是事务性的。即......你不会看到你的变化。 –

+0

听起来不错,我认为用更多的步骤加载数据是我需要的。 我将服务Servlet直接下载数据,我将提供将数据保存到文件并下载文件的选项。然后我可以为用户提供两种方法。谢谢! – Nils