Является ли набор результатов напрямую связан с базой данных - PullRequest
1 голос
/ 28 декабря 2010

В Java

Является ли запрос драйвера БД к БД для каждой строки набора результатов? Значит, если будет получено всего 200 строк, будет ли 200 запросов к базе данных? Или набор результатов хранится локально не в БД?

Если я заполняю набор результатов (на основании некоторых условий в выражении SQL), а затем я делаю некоторые обновления / изменения данных в базе данных. Вернет ли результат набор обновленных данных?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2010

Каждый драйвер JDBC может реализовывать свою собственную стратегию выборки.Драйвер будет извлекать ряд строк, прежде чем вы итерируете их.Таким образом, большой набор результатов не будет предварительно извлекать ВСЕ строки, а будет прокручиваться в пакетах размера выборки.

Вы можете предоставить драйверу JDBC подсказку длясколько вы хотели бы получить.

Как и в случае выполняющихся операторов SQL, вы не должны ожидать грязного чтения другими транзакциями, если вы действительно не хотите и не установите уровни изоляции как таковой.

Чаще всего Соединение устанавливает сеанс и сетевое соединение с БД, и 200 записей, о которых вы говорите, будут передаваться (и мультиплексироваться) через сетевое соединение с надлежащим управлением потоком.

Другой подход заключается в использовании RowSet вместо ResultSet, посредством чего вы можете получать уведомления о событиях изменений в тех строках, на которые влияют.

2 голосов
/ 28 декабря 2010

Вы должны уточнить, что именно вы подразумеваете под «запросом».Это зависит от драйвера и конфигурации, где данные кэшируются.Однако ни один драйвер не будет выполнять 200 отдельных запросов.

Для второго вопроса это зависит от уровня изоляция .

0 голосов
/ 28 декабря 2010

Я знаю, что если вы закроете свое заявление, вы не сможете выполнить итерацию по ResultSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...