2016-10-24 10 views
0

ユーザーがダイアログにデータを入力すると、データをsqliteデータベーステーブルに挿入しようとします。しかし、私は主キー制約違反がないことを確認する必要があります。このレコードがすでに存在することをユーザーに伝える最も良い方法は何かを知る必要があります。レコードのクエリ「どこ」と一緒に「選択」し、そのレコードがすでに主キー制約違反を避ける

2が存在するかどうかを確認してみ使用)でキャッチ/してみてください)

1:今まで私は2つの選択肢があると思います挿入し、制約違反について通知するエラーコード19をチェックします。

悲しいことに、実際にはプライマリキー制約違反ではなく、制約違反である必要があります。私は最初の選択を好むが、それは多くのパフォーマンスを食べていないのですか?

プライマリキーの存在をチェックし、適切なレコードデータを取得して適切なデータをユーザーに通知できるという機能が存在しない理由は、このレコードが既に存在することです。

このトピックのヒントはありがとうございます。

+0

selectを使用してください。 Try-catchの目的は予期しない動作を処理することです。これはかなり典型的なケースです。 –

+0

レコードが存在しない場合は、まずチェックを行い、レコードが存在しない場合は挿入を行い、成功または失敗のコードを返すストアドプロシージャを記述することができます。 – juharr

+0

ヒントのためのThanx! – brighty

答えて

2

selectを使用すると、アプリケーションレベルでcatchを試行するよりも高速になります。

+0

私はselectを使用します。しかし、私は主キーの選択を使用することを簡単にすることをお勧めします。私の場合、pkは3つのフィールドの複合体です。 selectステートメントの場合、私は3つのANDステートメントを使用する必要があります。 primary_key =( 'val1'、2、 'val3')のような構造を持つ方が簡単です。これにより、3つのANDステートメントが回避されます。 – brighty

+0

私はもちろん2つのANDステートメント – brighty

関連する問題