19

したがって、いくつかの相対的な違いを認識しています。つまり、ResultSetはデータベースへの「オープン接続」を持っていますが、RowSetは「切断された」方法で動作します。

しかし、それは私が理解していることです(間違っているかもしれません):

私の質問はこれです - どのような状況で一方が他方よりも好ましいのですか? それぞれの長所/短所は何ですか?

  • RowSet特に「読み取り専用」クエリの場合、切断モードで作業すると、高度な同時実行システムでパフォーマンスが向上すると思います。あれは正しいですか?その場合、読み取り専用クエリRowSetよりも常に好ましい と言っても過言 ではありませんか?ResultSet

  • 私が正しければ、繰り返し処理して RowSetも SQL 例外はスローされませんが、それは利点ですか? もう1つRowSetはシリアライズ可能です。しかし、私の懸念は主にパフォーマンスの観点からのもので、どのような選択になるのでしょうか?

  • しかし、読み書きクエリでも問題になるのでしょうか?? ResultSet を DB に同期できますか? (それが可能かどうかはわかりません(可能かもしれませんが、十分に思い出したり、グーグルで調べたりすることはできません:)生のJDBCを使用するのは久しぶりです...

何か案は?明らかなように、私の知識にはいくつかの欠けているギャップがあります:)

私が尋ねる理由は、Spring-JDBC のインターフェースを実装するか、データを処理ResultSetExtractorするときに返すかのどちらかを選択したいからです。SqlRowSetこの質問は、コインを投げる以外に、いつ何を選択するかを決定する方法に興味をそそられました:)

4

2 に答える 2

10

行セット

RowSetほとんどの場合、正しい選択です。より完全な機能があり、リストしたすべての利点があるだけでなくCachedRowSet、データがメモリに収まる場合に常に使用する切断のような特別な目的に特化した実装があるため、解放できますできるだけ早く接続をプールに戻し、再利用できるようにします。

ResultSet公的契約の一部であってはなりません。

接続ResultSet/Rowset済みは、メソッドまたは最悪の場合、それらを作成したオブジェクトを決してエスケープしてはなりません。少なくとも、RowSetそれを切断することができ、クライアントは実装を気にする必要はありません。*特定の機能やコントラクトJDBCと相互作用する、または依存する特定のライブラリ コードを作成している場合を除きます。ResultSet

クエリの結果を転送するだけの場合は、JDBC特定のクラスをパブリック コントラクトの一部にする必要があります。

RowSet/ResultSet理想的には、コンテンツを型安全なドメイン オブジェクトに具体化して渡したいと考えています。

ほとんどの場合、コードをAPIList/Setに直接結合するのではなく、ドメイン オブジェクトの をマテリアライズして操作および操作する必要があります。JDBC

ResultSetMapper<T>パターンを使用して型保証されたドメイン インスタンスの生成を処理するために、多くの最新のクラスが存在しますVisitor。これは慣用的な方法だからです。

于 2011-07-06T18:49:36.390 に答える