2010-12-28 10 views
1

Javaの場合結果セットがデータベースに直接接続されているかどうか

結果セットの各行に対してDBに対するDBドライバ要求がありますか?合計200の行がフェッチされた場合、データベースへの200の要求がありますか?または、結果セットはDBではなくローカルに格納されますか?

私は(SQLステートメントのいくつかの条件に基づいて)結果セットを作成して、データベースのデータを更新/変更します。結果セットが更新されたデータを返すかどうか

答えて

2

「リクエスト」が意味するものを明確にする必要があります。これは、データがキャッシュされるドライバと構成によって異なります。ただし、200の個別クエリを実行するドライバはありません。

2番目の質問では、それはisolationレベルに依存します。

0

Statementを閉じると、ResultSetを反復処理できないことがわかります。

+0

質問には答えません。 –

2

各JDBCドライバは、独自のフェッチ戦略を実装できます。ドライバは、繰り返し処理する前にいくつかの行をフェッチします。したがって、大きな結果セットはすべての行をプリフェッチしませんが、フェッチサイズのバッチでスクロールします。

provide the JDBC driver a hintあなたは取得したい数を入力してください。

進行中のSQL文と同様に、実際には、set the isolation levelsをそのまま使用するのが望ましい場合を除き、他のトランザクションによるダーティリードは期待できません。

ほとんどの場合、Connectionはセッションとネットワーク接続を確立し、適切なフロー制御を使用して、DBと200レコードの音声をストリーミング(&多重化)します。

もう1つの方法は、結果セットの代わりにRowSetを使用して、影響を受ける行の変更イベントを介して通知できるようにすることです。

関連する問題