首页 > 解决方案 > 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,这不是预期的。

但是,如果我添加ORDER BY doc_idsql 并重新导出结果,一切都会好起来的。

我认为这可能是由分页引起的,因此我编写了一个 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
        }
    }
}

标签: oraclejdbcresultset

解决方案


推荐阅读