他の人が2つの可能なアプローチがあると述べたように、1つはテストしてから挿入/更新するか、そうでなければSQL例外を処理することです。これらのアプローチには両方とも欠点があります。
- 「挿入前のテスト」の警告は、すべてのトランザクションにパフォーマンスに影響を与える追加のクエリがあることです。このような誤ったトランザクションの数が少ない場合、これは特に大きな問題になります。
- 「SQL例外の評価」の警告は、そのような例外メッセージが非常にデータベース固有であるということです。これらのメッセージは、ほとんどの場合、制約違反があることを示す以外に特定の情報を提供しません。
そこで、 2つのハイブリッドのアプローチを提案します。
- 挿入する前にテストを実行しないでください。
- データベースに例外をスローさせます。
- SQL例外をキャッチします。
- 例外フロー(キャッチブロック)で、追加のクエリを実行して、非常に具体的なエラーメッセージを作成し、正確に失敗したもの(一意キー、主キー、外部キー、特定の列など)を顧客に示します。
これには数行の追加コードが必要になる場合がありますが、パフォーマンスが確実に向上し、わかりやすいエラーメッセージが生成されます。