java使用jxl操作一百万数据到excel中,分sheet写入(一个sheet写五万)。如何避免内存溢出?

如题所述

分页查数据,每写完一个sheet,就存一次档(文件保存到硬盘上),并关闭所有文件操作,主动gc;
下一个sheet,重新打开文档,并重复上面一步。
反复重复上面两步,直到你的数据写入完为止。追问

能不能具体点,或者给个事例

追答

有倒是有实例,不过涉及太多业务处理,不合适直接给。

大概流程吧。

    查询数据库:

    queryData(int startIndex){

            ResultSet rs = ......;//查询1000行数据

            writeData(rs, startIndex/1000);//写数据

            queryData(startIndex+1000);//继续查询并写数据

        }

2.写数据:

        writeData(ResultSet rs, int sheetIndex){

      WritableWorkbook workbook = null;

      try {

          // 创建新的Excel

          workbook = Workbook.createWorkbook(.....);

          WritableSheet wsheet = workbook.createSheet("sheetname"+sheetIndex, 0);

                while(rs.next()){

                //遍历rs每行写入数据

                }

                rs.close();

          workbook.write(); // 写入文件

          workbook.close();

          System.gc();//主动回收内存

      } catch (xception ex2) {

          System.out.println("Exception:" + ex2.getMessage());

      }

        }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-09
操作一次清除一次内存吧,需要api函数。追问

如何清除?

第2个回答  2015-03-09
好像不能避免,只能通过参数增加内存追问

好像是的,谢谢回答!

第3个回答  2015-03-09
数据分页写入追问

是分页写入,但是要求必须写入一个excel中,这样就必须分sheet写入。在追加的过程中我是创建副本添加,当数据量过大时就会造成内存溢出?

本回答被网友采纳
相似回答