2012-03-08 86 views
0

我在我的DB中有一個表,有6,312,391個寄存器。我將數據導出到每個有200萬個寄存器的許多文件中,但由於某種原因,在最後一個文件中,並不是所有寄存器都按我的預期寫入。我有3個文件和2M的註冊表,最後一個只有312,355而不是312,391。ResultSet沒有帶來來自Oracle DB的所有數據

會發生什麼?我的java程序獲取數據如下:

public void generarArchivoPorRegistros(int registersPerFile) { 

    CallableStatement cs = null; 
    ResultSet rs = null; 

    connect(); 
    try { 
     cs = connection.prepareCall("{call pec_pec_proc(?)}"); 
     cs.registerOutParameter(1, OracleTypes.CURSOR); 
     cs.execute(); 

     rs = (ResultSet) cs.getObject(1); 

     int numberOfFile = 1; 
     int registersWrote = 0; 
     try { 
      BufferedWriter bw = new BufferedWriter(
        new FileWriter("SEDESOL_" + (numberOfFile * registersPerFile/(1000000)) + "M.txt")); 
      while (rs.next()) { 
       if (registersWrote == registersPerFile) { 
        bw.close(); 
        numberOfFile++; 
        bw = new BufferedWriter(
          new FileWriter("SEDESOL_" + (numberOfFile * registersPerFile/(1000000)) + "M.txt")); 
        registersWrote = 0; 
       } 
       bw.write(rs.getString(1)); 
       bw.newLine(); 
       registersWrote++; 
      } 
     } catch (IOException ex) { 
      Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } catch (SQLException ex) { 
     Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    disconnect(); 
} 

回答

5

在你的while循環之後,你需要關閉最後一個BufferedWriter。程序退出時可能沒有被刷新。

+0

我覺得你99.99%是對的,呵呵,讓我試試看吧。謝謝你的幫助。 – BRabbit27 2012-03-08 16:44:00

+0

感謝那是一件小事。 – BRabbit27 2012-03-08 17:22:28

相關問題