如何将结果集的数据保存在多个文件中?

时间:2013-12-10 18:57:55

标签: java jdbc apache-poi

我编写了一个程序,它从数据库读取数据并写入excel。我的代码如下......

public String ReadRows(String query) throws SQLException 
   {
    FileOutputStream fileOut = null;
    File file=new File("src/MyEcel.xlsx");
    String returnString = "";
    Connection c = null;
    int row = 1;

    XSSFWorkbook workbook = new XSSFWorkbook();
    try {
        Class.forName("org.postgresql.Driver");
        c = DriverManager.getConnection("url",username,password);
        c.setAutoCommit(false);
        System.out.println("Opened database successfully");
        Statement stmt = c.createStatement();
        XSSFSheet sheet = workbook.createSheet("NewData");           
        ResultSet rs = stmt.executeQuery(query);         

        while(rs.next())
        {

           myRow= sheet.createRow(row); 
           row++;
           for (int col = 1; col<ColumnCount(); col++)
           {
              if (rs.getObject(col) == null) 
                {   //code;
                } 
                else
                {   //code                     
                }                   
           }               
            fileOut = new java.io.FileOutputStream(file);
             workbook.write(fileOut);
             fileOut.flush();
            System.out.println("The size of file is "+file.length());
             fileOut.close();                
            //java.awt.Desktop.getDesktop().open(file);       
       }   
        catch(Exception ex)
          {// ex.printtrace();
             }

}}

我怀疑如何处理大量数据?我发现很少有文章说SXXSF会处理这个问题。但是,它只将数据流式传输到一个大文件中。我需要一个文件,每个文件只保存100个。所以我尝试使用集合,但我无法保存数据......你能帮助!!

1 个答案:

答案 0 :(得分:1)

我会保留一些计数器变量 - 一个用于保存写入当前电子表格的行数,例如rowsWritten,另一个用于保存到目前为止已完成的电子表格数量,例如{{1 }}

spreadsheetsWritten循环内,在每次迭代时递增while。如果rowsWritten已达到rowsWritten,请写出当前的电子表格,将100重置为rowsWritten,然后增加0。然后,如果您不在数据库的最后一行,则创建一个新的电子表格。这个新的电子表格应该是一个不同的文件名,这就是spreadsheetsWritten所在的位置。它可以被称为spreadsheetsWritten"src/MyExcel1.xlsx"等,但当然这取决于你。确保在"src/MyExcel2.xlsx"循环完成后关闭最后一个电子表格。