有一张表的数据,需要导出为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", "", ""); }
}
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", "", ""); }
}
解决方案 »
- 求助,一道笔试题,有点不太明白
- 优化一段java代码考虑不用PreparedStatement
- ResourceBundle能否使用绝对路径?
- Exception in thread "main" java.lang.NoClassDefFoundError: Exception2
- 求助有工作经验人
- 关于jbuilder的两个问题
- 如何使用timer在java中
- 关于内部类的一些问题。【静态成员类】【成员类】【局部类】【匿名类】的用法?
- c++ to java 的问题:一个int swap(int a,int b)方法,实现实参的交换,java方法没有传址的功能,怎么办?
- 来者给分!!!!
- Swing 窗体面板上控件无法正常显示?
- socket编写银行通讯接口,搞不懂他说的包头是什么东东,达人帮理解一下!
你把tomcat的内存设置大点 看看。
1.sql尽量简化,不要select * .要哪些字段就检索哪些字段。
2.检索结果放入session,那么你的session得要多大????想想别的办法.
我觉得是JAVA本身有个瓶颈,我以前导数据20000以下10秒就导出来了。但一旦数据上20000多速度就非常慢。
感觉是不是和机器、JAVA内存有关系
速度慢,是因为你的SQL语句有问题,效率太低,优化你的SQL,一般还是很快的,我导3W以上都很快的