ResultSet не принес все данные из базы данных Oracle - PullRequest
0 голосов
/ 08 марта 2012

В моей БД есть таблица с 6,312,391 регистрами. Я экспортировал данные во многие файлы с 2 миллионами регистров в каждом, но по некоторым причинам в последнем файле не все регистры были записаны, как я ожидал. У меня есть 3 файла с 2M regs и последний с 312,355 вместо 312,391.

Что могло случиться? Моя 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();
}

1 Ответ

5 голосов
/ 08 марта 2012

После цикла while вам нужно закрыть последний BufferedWriter.Возможно, он не был очищен при выходе из вашей программы.

...