2010-12-28 2 views
1

В Java,Является ли resultset напрямую связано с базой данных

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

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

ответ

2

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

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

0

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

+0

это не отвечает на вопрос. –

2

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

Вы можете provide the JDBC driver a hint относительно того, сколько вы хотели бы получить.

Как и в случае с SQL-запросами, вы не должны ожидать, чтобы грязные чтения выполнялись другими транзакциями, если вы действительно не хотите, и set the isolation levels как таковой.

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

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

Смежные вопросы