Oracle JDBC ResultSet没有返回正确的数据集

时间:2019-06-28 12:16:47

标签: oracle jdbc resultset

从Intellij导出Oracle SQL执行结果时,我注意到了这个问题。

sql是"SELECT TableA.seq||'-'||TableB.id doc_id FROM schemaA.TableA JOIN schemaB.TableB JOIN schemaA.TableC JOIN schemaA.TableD ON ...."

SELECT COUNT(doc_id)结果总计为137272,但是,导出的CSV文件的行数少于137272(有时为137258,不是固定的)。

我检查了结果,令人惊讶地发现有重复的doc_id,这是不期望的。

但是,如果我在sql中添加ORDER BY doc_id并重新导出结果,一切都会变好。

我认为这可能是由分页引起的,因此我编写了一个Java程序来获取数据。运气不好,输出文件也少于137272行,并且有一些重复的行。

如果我将FetchSize更改为1000,有时结果就可以了。如果fetchsize为100,则始终没有运气。

我无法弄清楚问题,我对JDBC的使用是否错误?

try (Connection conn = DriverManager.getConnection(JDBC_CONNECTION,
        JDBC_USER, JDBC_PASSWORD)) {
    try (Statement statement = conn.createStatement(); FileWriter fw = new FileWriter("out.txt")) {
        statement.setFetchSize(100);

        try (ResultSet rs = statement.executeQuery(sql)) {
            while (rs.next()) {
                fw.write(rs.getString(1));
                fw.write("\n");
            }
        } catch (SQLException ex) {
            // not shown in this code snippet
        }
    }
}

0 个答案:

没有答案