Oracle JDBC ResultSet не возвращает правильный набор данных - PullRequest
0 голосов
/ 28 июня 2019

Я заметил эту проблему при экспорте результата выполнения Oracle SQL из Intellij.

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, иногда результат будет в порядке.Если размер выборки равен 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
        }
    }
}
...