Java 结果组无';t从Oracle数据库获取所有数据

Java 结果组无';t从Oracle数据库获取所有数据,java,oracle,jdbc,resultset,Java,Oracle,Jdbc,Resultset,我的数据库中有一个表,有6312391个寄存器。我将数据导出到许多文件中,每个文件有200万个寄存器,但由于某些原因,在最后一个文件中,并非所有寄存器都像我预期的那样写入。我有3个文件,有2M个注册表,最后一个文件只有312355个,而不是312391个 会发生什么事?我获取数据的java例程如下所示: public void generarArchivoPorRegistros(int registersPerFile) { CallableStatement cs = null;

我的数据库中有一个表,有6312391个寄存器。我将数据导出到许多文件中,每个文件有200万个寄存器,但由于某些原因,在最后一个文件中,并非所有寄存器都像我预期的那样写入。我有3个文件,有2M个注册表,最后一个文件只有312355个,而不是312391个

会发生什么事?我获取数据的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();
}

在while循环之后,需要关闭最后一个BufferedWriter。当程序退出时,它可能没有被清除。

在while循环之后,您需要关闭最后一个BufferedWriter。当你的程序退出时,它可能没有被刷新。

我想你99.99%是对的,呵呵,让我试试。谢谢你的帮助。谢谢这是一个小东西。我想你99.99%对了。呵呵,让我试试。谢谢你的帮助。谢谢。就是那个小东西。