2012-03-08 1 views
0

6,312,391 레지스터가있는 DB에 테이블이 있습니다. 2 백만 개의 레지스터가있는 많은 파일로 데이터를 내보내고 있었지만, 마지막 파일에서 어떤 이유로 든 모든 레지스터가 예상 한대로 작성되지 않았습니다. 나는 2M regs를 가진 3 개의 파일을 가지고 있고 312,391 대신 312,355를 가진 마지막 파일을 가지고있다.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

마지막으로 BufferedWriter를 닫아야합니다. 아마 프로그램이 종료 될 때 플러시되지 않았을 것입니다.

+0

나는 당신이 99.99 % 맞다고 생각한다. 시도해 보자. 당신의 도움을 주셔서 감사합니다. – BRabbit27

+0

그 작은 것이 었습니다. – BRabbit27