2012-10-12 119 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