來自:javaeye網(wǎng)站
biguan 寫道
tidus2005 寫道
biguan 寫道
我同事最近要把1000萬條記錄從數(shù)據(jù)庫導到excel里,在我的幫助下解決了。
呵呵。原創(chuàng)的。
因每個excel最多放5萬條,所以他把這1000萬條記錄記錄放到了200個excel文件里。用時40分鐘。
采用基本的jdbc技術+io流。
1.先進一個excel文件。填上要的表頭和兩條記錄。然后另存為網(wǎng)頁a.html。
2.用記事本打開網(wǎng)頁a.html,就看到源代碼。把源代碼分成三部分:頭+記錄行+尾。
3.用jdbc訪問數(shù)據(jù)庫,循環(huán)遍歷,每5萬條,用io流寫文件,格式為"xxx.xls”。
a.html的頭代碼+記錄行代碼(已經(jīng)被5萬條替換)+尾代碼。
沒有看太懂你的意思, 用html是干什么?
用java的io寫txt格式的文件,大家都會吧?
其實,也可以用java的io寫xls格式的文件的。關鍵是你得按一定的excel文件格式寫,才能保證生成的是excel文件。
這個格式怎樣得到呢?方法是這樣:
你先建一個excel文件,如a.xls。填上兩條偽數(shù)據(jù)。然后另存為網(wǎng)頁,即htm格式,如a.htm。
然后,用記事本打開htm格式的a.htm,這樣excel文件格式代碼就暴露在你面前。
剩下的事,呵呵,就是把a.htm源代碼的偽數(shù)據(jù)部分,替成數(shù)據(jù)庫里的數(shù)據(jù),然后把替換后的整個a.htm源代碼,用java的io寫成一個
后綴為xls的文件。就打完收工了。
注意:為了不給內(nèi)存增加壓力,要把a.htm源代碼分成三部分:頭(偽數(shù)據(jù)部分 前的代碼) + 偽數(shù)據(jù)部分 + 尾(偽數(shù)據(jù)部分 后的代碼)。
先把 頭 寫到文件,并flush。然后是 偽數(shù)據(jù)部分 ,替一條數(shù)據(jù)庫里的記錄就寫到文件里,并flush。最后把 尾 寫到文件,并flush。
呵呵,你的方法很好啊,其實我本來也想到直接用io生成XLS文件的,不會我是直接用記事本打開的,結果看到亂碼 - -
還有寫io你提到了重點,就是要經(jīng)常flush,不然數(shù)據(jù)大就OOM了。
我的方法也主要就是拼字符串,還有就是從數(shù)據(jù)庫讀取的數(shù)據(jù)采用分頁的形式,用list分次讀取出來,結束采用list.clear()一下,及時把資源釋放。