2

JavaでSQLの一意のインデックスに基づいて例外をキャッチするのが良い考えかどうか知りたいです。

「1-0 の重複エントリ」のような例外をキャッチしたい場合は、例外を処理します。それ以外の場合は、データベース テーブルに適切に挿入しますか?

4

3 に答える 3

2

私はあなたがそれをしないと言います、2つの理由で:

  • エラーメッセージは少し不明瞭です:エラー1062(23000):キー1のエントリ「xxx」が重複しています。どのキーが1であるかを常に100%確信していますか?
  • 特定のデータベースベンダーに固定されます

トランザクションの方が簡単だと思います:

  • 行の存在を確認します。
  • 行がすでに存在する場合は例外をスローします。
  • 新しい行を挿入します。

パフォーマンスの問題

私は2回測定し、1回カットすると言います。特定のユースケースの使用法をプロファイリングします。頭のてっぺんに、データベースの使用頻度が高いシナリオを除いて、パフォーマンスは問題にならないでしょう。

その理由はSELECT、その特定の行に対して実行すると、そのデータがデータベースキャッシュに配置され、ステートメントのインデックスで実行される挿入チェックにすぐに使用されるためです。INSERTまた、このアクセスはインデックスによって裏付けられていることを念頭に置いておくと、パフォーマンスは問題にならないという結論につながります。

しかし、いつものように、測定してください。

于 2009-06-22T08:04:02.663 に答える
1

REPLACEコマンドを使用できます。レコードの存在に基づいて挿入/更新します。そして、そのアトミックも同様ですが、クエリ、挿入/更新はそうではありません。キー違反を検出した場合、何をしたいかによりますか?

于 2009-06-22T07:50:08.790 に答える
1

理由がわかりません。おそらく、挿入の前にクエリを実行するよりも効率的です。ただし、エラー メッセージを認識するよりも、例外のエラー コードをキャッチする方がよいでしょう。

于 2009-06-22T07:19:15.873 に答える