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