У меня есть код, как это ниже,resultSet.next(): извлекает ли данные из буфера или из базы данных?
try (Connection connection = this.getDataSource().getConnection();
PreparedStatement statement = connection.prepareStatement(sqlQuery);) {
try {
statement.setFetchSize(10000); // Set fetch size
resultSet = statement.executeQuery();
while (true) {
resultSet.setFetchSize(10000);
boolean more = resultSet.next();
if (! more) {
break;
}
// populating an arraylist from the value from resultSet
}
}
catch (Exception e) {
LOGGER.error("Exception : "+e);
}
} catch (SQLException e) {
LOGGER.error("Exception : "+e);
}
Мое понимание заключается в следующем,
Оператор размер выборки 10000. когда statement.executeQuery() выполняется, она возвращает ResultSet курсор. Он будет иметь 10000 строк в памяти. Когда вызывается resultSet.next, он получает одну строку из буфера памяти. (одна строка за вызов). Когда в памяти больше нет строк, запрос снова запускается, и 10000 строк снова извлекаются из базы данных и сохраняются в буфере. Это продолжается до тех пор, пока ни одна строка будет выбираемые из БД
Так что, если я правильно понимаю, сколько реальных БД вызывает будет там для полных строк 210000? Это 21? (210000/10000)
Также, когда и кто вызывает БД (когда строки в буфере все прочитаны), чтобы получить больше строк (10000, в моем случае) и сохранить в буфере. Также когда очищается буфер?
Пожалуйста, исправьте меня, если я ошибаюсь в своем понимании.
Мне нужно работать с миллионами данных в Oracle Database.
Спасибо за любые советы/Информация
С уважением,
SD
Метод 'setFetchSize #' должен быть подсказкой. Это полностью зависит от драйвера JDBC, чтобы использовать или игнорировать его. Также 'who call the DB' -> драйвер делает это. Получил большую часть этого из этого [SO Q/A] (http://stackoverflow.com/questions/1318354/what-does-statement-setfetchsizensize-method-really-do-in-sql-server-jdbc-driv) –
В случае драйвера OCI есть раздел в документации, в котором описывается объем сетевых поездок по сети для каждого вызова OCI. Драйвер JDBC не документирован таким образом - он обеспечивает API более высокого уровня. Но вы можете использовать документ OCI как введение в тему. – ibre5041