try (Connection connection = DriverFactory.getConnectionForDriver(driverType); PreparedStatement ps = connection.prepareStatement(PAGE_QUERY)) {
ConnectionStopWatch watch = new ConnectionStopWatch().start();
ResultSet rs = ps.executeQuery();
rs.setFetchSize(userFetchSize);
while (rs.next()) {
rs.getString(2);
rowCount++;
}
watch.stop();
} catch (Exception e) {
e.printStackTrace();
}
Это тестовый пример, который я написал, чтобы проверить, выполнено ли fetchSize или нет. Во всех случаях rowCount был исправлен для конкретного драйвера. Новый объект подключения используется каждый раз. Ниже приведены выходные данные для вышеуказанного фрагмента теста:
---------------------------------------------------
DRIVER ROWS TIME IN MS FETCH SIZE
---------------------------------------------------
MSSQL 90276 519 10000
---------------------------------------------------
MSSQL 90276 433 10000
---------------------------------------------------
MSSQL 90276 437 10000
---------------------------------------------------
MSSQL 90276 434 10000
---------------------------------------------------
OJDBC 389 73 10000
---------------------------------------------------
OJDBC 389 9 10000
---------------------------------------------------
OJDBC 389 8 10000
---------------------------------------------------
OJDBC 389 8 10000
---------------------------------------------------
Использование Oracle 12 и SQL Server 2017. Не вызывает ли последующее получение некоторое кэширование в конце базы данных? Или fetchSize применяется после первой выборки на этой таблице? Я попытался установить fetchSize на PreparedStatement, но получил тот же результат. Запрос представляет собой простой выбор звезды из таблицы.