2

Connection取得したオブジェクトを閉じても効果はありますResultSetか?

Connection con= DriverManager.getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
con.close();

これに加えて、私は自分のrsオブジェクトを使用しており、それに影響はないと感じています。ResultSetStatementは互いに関連しているからです。

4

4 に答える 4

3

Connection接続が閉じられた後は、から派生したものを使用しないでください。

これは、実際に使用するまで、結果セットなどがマシンに転送されない可能性があるためです。データベースは、転送バッチ処理とサーバーカーソルを使用できます。これは、結果セットカーソルを移動して(たとえば、を使用して)実際に要求したときに、行のブロックのみを転送するという複雑な言い方ですResultSet#next()

BLOBや他のLOBタイプなど、結果セットの他の部分は、実際に結果セットから読み取るまで、まったく転送されません。これは、それらが任意に大きくなる可能性があり、DBドライバー(わかりました、優れたDBドライバー)がクライアントで使用するメモリを最小限に抑えたいためです。

DBサーバー自体は通常、ドライバー(通信アービターにすぎない)よりもはるかに洗練されており、「重い作業」(結果セットのマーシャリングと一時的な保存)をDBに任せるのが最善です:-)

したがって、接続を閉じると、クエリに関連付けられているすべてのサーバーリソース(および多くのリソースが存在する可能性があります)が解放されることがわかります。

于 2012-09-21T11:35:02.630 に答える
3

が閉じられると、Connection他のリソース(StatementsまたはResultSets)を使用してはなりません。

于 2012-09-21T11:05:45.767 に答える
3

データベースへの接続を閉じた直後は、結果セットにアクセスできません。メソッドを使用resultset.next()すると、次のレコードをフェッチするためにデータベースにリクエストが送信されるためです。しかし、物理的には接続が閉じられています。だから、Exceptionあなたのステートメントによってスローされますresultset.next()

于 2012-09-22T07:11:22.000 に答える
2

閉じた後にアクセスしたい場合は、接続を閉じることはできませんResultSetResultSetデータにアクセスしようとすると、データが失われ、例外が発生します。

これは、ResultSetインスタンスがDB接続にリンクされているためです。

于 2012-09-21T11:05:51.490 に答える