java 大數據量導出,該怎麼解決

對於數據規模太大的,做成任務。

用戶點擊導出,檢查他的數據規模,版超過50W的,提示其數據規模過大,可能需要權 N 小時完成,請稍候再來查詢和下載導出結果。如果用戶點擊確定,你就提示:「任務已進入隊列,點擊此連接查詢導出進度。」

然後你要做兩件事情:
1、給這個用戶記錄個標識,就是他已經啟動某導出任務,不能再啟動新的了(或者限制一個人最多同時啟動幾個導出任務);
2、後台有個調度程序,開始執行導出工作,並將生成的Excel放在某磁碟目錄或存在資料庫中;這個調度任務可以控制下最大同時並發的導出任務數,以避免任務太多拖垮系統。

另外需要開發界面查詢導出進度以及下載導出結果。導出結果可以考慮一個最大保存周期,比如7天。

⑵ JAVA代碼!有沒有比較快速的導出大數據量的代碼例子!最後能直接放入項目實施的!

沒太看懂。是不是打成war包,然後放到伺服器裡面運行

⑶ java導出大數據量的excel而且excel有多個sheet,有什麼比較好的方法

PageOffice很不錯啊,網上有很多它的示例代碼搜搜看啊

⑷ java導出大量數據,出現錯誤

這種異常一般是由於調用Method類的invoke()方法,該方法所代表的指定方法拋出異常時,或者專調用Constructor類的newInstance()方法,該方法所代表的底層構造方法拋出異常時,由java.lang.reflect.InvocationTargetExceptio異常包裝後作為新的異常拋出而產生,默認異常信息是NULL。
因此,有可能是由於數據問題導致以反射的方屬式調用的方法(即:Method類代表的方法)在運行時拋出了異常,被封裝成InvocationTargetExceptio異常拋到後台。所以可以去檢查一下這個以反射的方式調用的方法,在調用到了什麼數據的時候拋出了異常。

⑸ 關於Poi 大數據量Excel 導出時 文件過大的問題 怎麼解決

建議要導excel前excel已經支持cvs文件
解釋:cvs文件顯示式xls顯示式並且顯示式執行效率要高於xls文件額cvs文件存版儲數據直權接直接用英文逗號隔xls存儲cell所量數據情況都導cvs文件
備註:數據建議查詢導要性導否則效率低
-

⑹ JAVA如何實現導出大數量EXCEL報表 數據大概100W條

好像是你的excel文件問題,你另外新建一個,再寫點東西在裡面試下隨便給你一個我以前用過的importjava.io.*;importjava.text.SimpleDateFormat;importjava.util.*;importjava.sql.*;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjxl.*;publicclassSimUpdate{privateStringfileName;publicSimUpdate(StringfileName){this.fileName=fileName;}staticMaptNames;static{tNames=newHashMap();}//下面是主要代碼privatevoipdateDb(){try{Connectionconn=DbPool.connectDB();if(conn!=null){Statementstmt=conn.createStatement();/**********************************************/jxl.Workbookrwb=null;try{//構建Workbook對象只讀Workbook對象//直接從本地文件創建Workbook//從輸入流創建WorkbookInputStreamis=newFileInputStream(fileName);rwb=Workbook.getWorkbook(is);//Sheet(術語:工作表)就是Excel表格左下角的Sheet ,Sheet ,Sheet 但在程序中//Sheet的下標是從 開始的//獲取第一張Sheet表Sheetrs=rwb.getSheet( );//獲取Sheet表中所包含的總列數intrsColumns=rs.getColumns();//獲取Sheet表中所包含的總行數intrsRows=rs.getRows();//獲取指這下單元格的對象引用StringsimNumber="",termSeqId="";//指定SIM卡號及序列號for(inti= ;i ){System.out.println("成功插入第"+i+"條數據");}}}//以下代碼為寫入新的EXCEL,這里不使用,所以注釋/*//利用已經創建的Excel工作薄創建新的可寫入的Excel工作薄jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile("D://Book .xls"),rwb);//讀取第一張工作表jxl.write.WritableSheetws=wwb.getSheet( );//獲取第一個單元格對象jxl.write.WritableCellwc=ws.getWritableCell( , );//決斷單元格的類型,做出相應的轉化if(wc.getType()==CellType.LABEL){Labell=(Label)wc;l.setString("Thevaluehasbeenmodified.");}//寫入Excel對象wwb.write();wwb.close();*/}catch(Exceptione){e.printStackTrace();}finally{//操作完成時,關閉對象,翻譯佔用的內存空間rwb.close();}/*********************************************/}}catch(Exceptione){e.printStackTrace();}}}

⑺ java導出大數據量到csv文件,資料庫大概有4、5W條數據,性能很慢,求各位大俠給個好方法

多線程啊,按照rownumber,比方說每5000或2000條開個線程,往外讀。

⑻ java怎麼在數據超過百萬後分頁導出

用過POI的人都知道,在POI以前的版本中並不支持大數據量的處理,如果數據量過多還會常報OOM錯誤,
這時候調整JVM的配置參數
也不是一個好對策(註:
jdk在32位系統中支持的內存不能超過2個G,而在64位中沒有限制,但是在64位的系統中,性能並不是太好
),好在POI3.8版本新出來了一個SXSSFWorkbook對象,它就是用來解決大數據量以及超大數據量的導入導出操作的,但是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式的Excel文件。
這里普及一下,在POI中使用HSSF對象時,excel 2003最多隻允許存6553數據,一般用來處理較少的數據量,這時對於百萬級別數據,Excel肯定
容納不了,而且在計算機性能稍低的機器上測試,就很容易導致堆溢出。當我升級到XSSF對象時,它可以直接支持excel2007以上版本,因為它採用
ooxml格式。這時excel可以支持1048576條數據,單個sheet表就支持近104
萬條數據了,雖然這時導出100萬數據能滿足要求,但使用XSSF測試後發現偶爾還是會發生堆溢出,所以也不適合百萬數據的導出。現在我們知道excel2007及以上版本可以輕松實現存儲百萬級別的數據,但是系統中的大量數據是如何能夠快速准確的導入到excel中這好像是個難題,對於一般的web系統,我們為了解決成本,基本都是使用的入門級web伺服器tomcat,既然我們不推薦調整JVM的大小,那我們就要針對我們的代碼來解決我們要解決的問題。在POI3.8之後新增加了一個類,
SXSSFWorkbook
,採用當數據加工時不是類似前面版本的對象,它可以控制excel數據佔用的內存,他通過控制在內存中的行數來實現資源管理,即當創建對象超過了設定的行數,它會自動刷新內存,將數據寫入文件,
這樣導致列印時,佔用的CPU,和內存很少。但有人會說了,我用過這個類啊,他好像並不能完全解決,當數據量超過一定量後還是會內存溢出的,而且時間還很長。對你只是用了這個類,但是你並沒有針對你的需求進行相應的設計,僅僅是用了,所以接下來我要說的問題就是,如何通過SXSSFWorkbook以及相應的寫入設計來實現百萬級別的數據快速寫入。
我先舉個例子,以前我們[資料庫
中存在大量的數據,我們要查詢,怎麼辦?我們在沒有經過設計的時候是這樣來處理的,先寫一個集合,然後執行jdbc,將返回的結果賦值給list,然後再返回到頁面上,但是當數據量大的時候,就會出現數據無法返回,內存溢出的情況,於是我們在有限的時間和空間下,通過分頁將數據一頁一頁的顯示出來,這樣可以避免了[大數據
量數據對內存的佔用,也提高了用戶的體驗,在我們要導出的百萬數據也是一個道理,內存突發性佔用,我們可以限制導出數據所佔用的內存,
這里我先建立一個list容器,list中開辟10000行的存儲空間,每次存儲10000行,用完了將內容清空,然後重復利用
,這樣就可以有效控制內存,所以我們的設計思路就基本形成了,所以分頁數據導出共有以下3個步驟:
1、求資料庫中待導出數據的行數
2、根據行數求數據提取次數
3、按次數將數據寫入文件