我这段时间需要往excel表格中写入大量数据,所以找了jakarta的poi来将一个ResultSet中的数据写入excel表格。实现的部分程序附在后面。
    这段代码虽然可以是实现ResultSet中的数据写入excel表格的功能,但是,写入速度很慢。测试环境是CPU1.7G、内存1G、winXP、JDK1.5。开始的时候写入速度还可以,写入几百条数据后,速度逐渐下降,写入两千条左右之后的速度大概是一条每秒,再往后我就没有测试了。
    哪位大哥能帮我看看问题出在什么地方,小弟我万分感激!
public boolean elsExport(ResultSet rs,String fileName,String tableName){
this.setFileName(fileName);
this.setTableName(tableName);
try{
// 如果filePath不存在,则创建路径
if(!new java.io.File(filePath).isDirectory()){
new java.io.File(filePath).mkdirs();
}
File objFile = new File(fileName);
HSSFWorkbook workbook = null;
HSSFSheet sheet = null;
//如果文件不存在,则创建文件。
if(!objFile.exists()){ 
System.out.println("检测到文件不存在,正在创建文件...");
workbook = new HSSFWorkbook();
//sheet = workbook.createSheet(tableName);
FileOutputStream fOut = new FileOutputStream(fileName);
workbook.write(fOut);
fOut.flush();
fOut.close();
}
workbook = new HSSFWorkbook(new FileInputStream(fileName));
sheet = workbook.createSheet(tableName);
FileOutputStream fOut;
HSSFRow row;
HSSFCell cell;
int i=1;
while (rs.next()&&i<=1000){
for(int j=0; j<5; j++){
fOut= new FileOutputStream(fileName);
row = sheet.createRow(i);
cell = row.createCell((short)j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(rs.getString(j+1));
workbook.write(fOut);
fOut.flush();
fOut.close();
}
System.out.println("文件已写入第"+i+"行..");
++i;
}
System.out.println("文件已生成!");
}catch(Exception e) {
System.out.println("错误 : " + e );
}
return true;
}

解决方案 »

  1.   

    哈哈 以前听说excel能直接当数据库用
    先 明天来学习
      

  2.   

    fOut= new FileOutputStream(fileName);
    没必要在两层循环中间调用吧??拿到while外面来!!
      

  3.   

    这个已经是整个函数的代码了~~T.T
    只是贴上去有点难看而已!彗星撞地球的建议我晚上试试~
    谢谢咯~建议不要用excel来当数据库,不然你会哭的!!
      

  4.   

    public boolean elsExport(ResultSet rs, String fileName, String tableName) throws SQLException, IOException {
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet(tableName);
            int i = 0;
            while (rs.next()) {
                HSSFRow row = sheet.createRow(i);
                for (short j = 0; j < 5; j++) {
                    HSSFCell cell = row.createCell(j);
                    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                    cell.setCellValue(rs.getString(j + 1));
                }
                i++;
            }        FileOutputStream out = new FileOutputStream(fileName);
            workbook.write(out);
            out.close();        return true;
        }
      

  5.   

    已经按照彗星撞地球和梦醒了两位大哥的写法做了测试,速度果然大大提高了!谢谢两位了~
    ^.^但是又出现了一个问题,当一个RS中数据量过万的时候,写入文件会出现异常:
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    我正在想办法解决,如果哪位大哥有好的方法,希望能多多指点哦~ 小弟我先谢谢了