Краткий ответ:
Используйте Statement.setFetchSize(1)
перед вызовом executeQuery()
.
Длинный ответ:
Это зависит очень от того, какой драйвер JDBC вы используете. Возможно, вы захотите взглянуть на эту страницу , которая описывает поведение MySQL, Oracle, SQL Server и DB2.
Основные выносы:
- Каждая база данных (то есть каждый драйвер JDBC) имеет свое поведение по умолчанию.
- Некоторые водители будут соблюдать
setFetchSize()
без каких-либо предостережений, в то время как другим требуется некоторая «помощь».
MySQL - особенно странный случай. См. эту статью . Звучит так, будто вы звоните setFetchSize(Integer.MIN_VALUE)
, тогда он будет загружать строки по одной, но это не совсем понятно.
Другой пример: вот документация для поведения PostgreSQL. Если автоматическая фиксация включена, ResultSet будет извлекать все строки одновременно, но если она отключена, вы можете использовать setFetchSize()
, как и ожидалось.
И последнее, о чем следует помнить: эти настройки драйвера JDBC влияют только на то, что происходит на стороне клиента. Сервер все еще может загрузить весь набор результатов в память, но вы можете контролировать, как клиент загружает результаты.