oracle - 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_id
sql 并重新导出结果,一切都会好起来的。
我认为这可能是由分页引起的,因此我编写了一个 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
}
}
}
解决方案
推荐阅读
- c++ - C++ 列表迭代器无法初始化
- python - 使用python从JSON文件中的嵌套列表中获取元素
- javascript - 如何从 redux thunk 动作返回一个承诺并在组件中使用它
- java - MySQL 和 Java 连接的循环错误
- python - 如何使整数列表中的升序子列表按降序排列?
- c++ - 如何在 C++ 中返回结构数组?
- c++ - Mingw 终端输出:'vsnprintf' 的多重定义
- pca - 加权矩阵分解
- spring-boot - 在 Thymeleaf 中需要等效的 JSP 标记
- gcc - 在 Windows 上使用 MSYS2 安装 GCC 9.2.0