有一张表的数据,需要导出为EXCEL文件。之前代码已实现,能够导出,但如果数据量比较大,界面执行很久很久都导不出来,比如导出3到5万条记录。我把我的代码贴出来,大家看看有什么好的方法能够导出大的数据量。public void exportExcel() {
try {
String path = getServletContext().getRealPath("")
+ File.separatorChar + "temp";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdir();
}
String date = format.format(new Date());
date = date.replaceAll(":", "");
String logFile = path + File.separatorChar + date + ".xls"; File logsF = new File(logFile);

                        //list: 根据条件查询出需要导出的数据; column:EXCEL的头 ;exceptColumn :头所对应的内容;logFile:文件名
List list = sysLogsService
.exportLogs(searchUserName, searchHost, searchStartTime,
searchEndTime, searchType, searchModule,
searchMessage, searchLogLevle, searchmoduleGroup,
moduleMap);
String[] column = { "模块名称", "操作内容", "操作标识", "操作人 ", "IP地址",
"操作时间" };
String[] exceptColumn = { "moduleNameCN", "message",
"logLevel_CHName", "username_Info", "host",
"logTimeStr" };
                        
                        //此方法用于导出,然后放入session.
byte[] bytes = ExportExcel.toSellExcel(column, list, logFile,
exceptColumn);
if (bytes != null) {
getSession().setAttribute("downLoadFileName",
logsF.getName());
getSession().setAttribute("downLoadFileBytes", bytes);
downLoadIsSuccess = "true";

} else {
setPromptWinParams("日志无法导出EXCEL文件", "failue", "", ""); } } else {
setPromptWinParams("没有查询结果,无法导出EXCEL文件", "failure", "", ""); } } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
setPromptWinParams("日志导出EXCEL文件有异常", "success", "", ""); }
}

解决方案 »

  1.   

    关注。
    你把tomcat的内存设置大点 看看。
      

  2.   

    可以用分页的方式导出吧.比如说list的size每次是100条,循环下去
      

  3.   

    提点想法。
    1.sql尽量简化,不要select * .要哪些字段就检索哪些字段。
    2.检索结果放入session,那么你的session得要多大????想想别的办法.
      

  4.   

    楼主不妨利用 Interator 接口,实现一边读数据一边导出。这样效率应该会好些,内存占用也会少很多。
      

  5.   

    数据放进 cache 另起线程导出,有条件的 用台服务器做cache ,用台服务器专门做打出
      

  6.   

    不一定是数据库的问题。
    我觉得是JAVA本身有个瓶颈,我以前导数据20000以下10秒就导出来了。但一旦数据上20000多速度就非常慢。
    感觉是不是和机器、JAVA内存有关系
      

  7.   

    分页导出吧定一个数,1000吧,比较好。
    速度慢,是因为你的SQL语句有问题,效率太低,优化你的SQL,一般还是很快的,我导3W以上都很快的
      

  8.   

    数据量太大,用EXCEL是不现实的