读书人

java中施用poi导出Excel大批量数据到客

发布时间: 2012-08-30 09:55:54 作者: rapoo

java中使用poi导出Excel大批量数据到客户端

在java web系统应用中我们经常会用到大批量数据的导出,动辄就上几十万几百万的数据让我们的程序感觉压力很大,甚至都出现无法导出的情况,如内存溢出等。

?

在这里给大家提供一种思路:分多个文件导出,在生成文件的过程中注意回收内存,

System.out.println("---------------------");File directory=null;String zipPath=null;String taskId = datas[0];String diffFlag = datas[1];try {directory = new File(String.valueOf(System.currentTimeMillis()));directory.mkdir();String directoryPath = directory.getAbsolutePath();StringBuffer buffer = new StringBuffer("select t.id,t.phone,t.diff_flag from ");buffer.append(" dcs_task_user_diff_" + taskId + " t where t.diff_flag='" + diffFlag + "' and rownum <=1000000");Connection connection = GetDBConnection.getConnection();Statement createStatement = null;createStatement = connection.createStatement();ResultSet resultSet = createStatement.executeQuery(buffer.toString());int p=0;    int i=0;    int j=0;    HSSFWorkbook workbook=null;    File file=null;    HSSFSheet createSheet=null;    FileOutputStream fileOutputStream=null;    int countPerFile = 50000;int countPerSheet =5000;while (resultSet.next()) {if(i%countPerFile==0){int countfile=(i/countPerFile+1);String fileName=directoryPath+File.separator+countfile+".xls";System.out.println("创建第"+fileName);workbook=new HSSFWorkbook();file=new File(fileName);j=0;}if(j%countPerSheet==0){int sheetCount=(j/countPerSheet+1);System.out.println("       创建第"+sheetCount+"个sheet");createSheet=workbook.createSheet(sheetCount+"sheet");System.gc();p=0;HSSFRow createRow = createSheet.createRow(p);createRow.createCell(0).setCellValue(new HSSFRichTextString("编号"));createRow.createCell(1).setCellValue(new HSSFRichTextString("手机号"));p++;}HSSFRow createRow = createSheet.createRow(p);createRow.createCell(0).setCellValue(new HSSFRichTextString(resultSet.getString("id")));createRow.createCell(1).setCellValue(new HSSFRichTextString(resultSet.getString("phone")));i=i+1;j=j+1;p++;if(j%countPerSheet==0||j==1){fileOutputStream = new FileOutputStream(file);workbook.write(fileOutputStream);fileOutputStream.flush();}if(j%countPerFile==0){workbook.write(fileOutputStream);fileOutputStream.flush();fileOutputStream.close();}}if(fileOutputStream!=null){fileOutputStream = new FileOutputStream(file);workbook.write(fileOutputStream);fileOutputStream.flush();}GetDBConnection.destroyConnection(connection, createStatement);System.out.println(file.getAbsolutePath());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} zipPath= JasperExportHelper.CreateZipFile(directory.getAbsolutePath(), directory.getAbsolutePath()+".zip");System.out.println(zipPath);return zipPath;

?

读书人网 >软件架构设计

热点推荐