从DB到excel的JSP输出流对于大记录量来说非常慢

问题描述 投票:0回答:1

我正在调用JSP程序以从数据库中提取数据以实现excel。数据库表具有112列和35k记录。提取数据需要一个小时。关于如何在5分钟内制作出任何建议?我看过很多类似的文章,但找不到任何可以改善性能的文章。感谢您的建议。我的工作代码如下-

<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.ResultSetMetaData"%>
<%@page import="java.util.*"%>
<%@page import="java.sql.SQLException"%>
<%@page import="org.apache.poi.ss.usermodel.Cell"%>
<%@page import="org.apache.poi.ss.usermodel.Row"%>
<%@page import="org.apache.poi.ss.usermodel.Sheet"%>
<%@page import="org.apache.poi.ss.usermodel.Workbook"%>
<%@page import="org.apache.poi.ss.usermodel.WorkbookFactory"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Export Data to Excel File</title>
</head>
<body>
		
<%
		
        HSSFWorkbook writeWorkbook = new HSSFWorkbook();
        HSSFSheet desSheet = writeWorkbook.createSheet("sheet");
		Connection connection = null;
		ResultSet rs = null;
		int counter=1;
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection("jdbc:oracle:thin:@PRD:PRD","ABC","ABC");
			Statement statement = connection.createStatement();
			String sql = ("select * from tblnm");
			rs = statement.executeQuery(sql);
			ResultSetMetaData rsmd = rs.getMetaData();
            int columnsNumber = rsmd.getColumnCount();

            Row desRow1 = desSheet.createRow((short)0);
            for(int col=0 ;col < columnsNumber;col++) {
                Cell newpath = desRow1.createCell(col);
                newpath.setCellValue(rsmd.getColumnLabel(col+1));
            }
            while(rs.next()) {
                System.out.println("Row number" + rs.getRow() );
                Row desRow = desSheet.createRow(rs.getRow());
                for(int col=0 ;col < columnsNumber;col++) {
                    Cell newpath = desRow.createCell(col);
                    newpath.setCellValue(rs.getString(col+1));  
                }
                FileOutputStream fileOut = new FileOutputStream("C:/test.xls");
                writeWorkbook.write(fileOut);
				fileOut.flush();
                fileOut.close();
				out.println("Your excel file has been generated!");
                writeWorkbook.write(response.getOutputStream()); 
            }
        }
        catch (SQLException e) {
            System.out.println("Failed to get data from database");
        }
	%>
		</body>
		</html>	
jsp fileoutputstream poi-hssf
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.