2012-01-20 8 views
-1

sqliteデータベースのユーザーから情報を取得しています。 しかし、すでにデータベースに入っている同じレコードを挿入すると、再び追加されます。 どのように私はsqliteのレコードの重複を停止することができます。私はアンドロイドでこれを開発しています。 私は主キーとして携帯番号を使用しています。それでもそのレコードをデータベースに追加します。 私に適切な解決策を提案してください。 ありがとうございました。android appを使用したsqliteのデータ複製

答えて

0

テーブルを作成した時点で電話番号をプライマリキーに設定していることを確認してください。例えば

String query = "CREATE TABLE IF NOT EXISTS PhoneBook ("+ 
"TelNum VARCHAR(100) PRIMARY KEY NOT NULL,"+ 
"Address TEXT);"; 

db.execSQL(query); 

と場合に、あなたのテーブルに定義された外部キーを強制するには、その後、キーワードINTO REPLACE使用

db.execSQL("PRAGMA foreign_keys = ON;"); //enforcing FK 
0

データベースに何かを行う前に、次のメソッドを呼び出します。

REPLACE INTO my_table (pk_id, col1) VALUES (5, '123'); 

これにより、自動的にプライマリキーが識別され、一致が検出されます。見つからない場合は新しい行を挿入して更新します。

2

アプリケーションユーザーがデータベースのこれらの行に追加したカスタムデータを上書きするため、REPLACEまたはINSERT OR REPLACEの制限に注意してください。他のSQLデータベースのUPSERTほど高度ではありません。

前の記事で説明したように、主キーの内容を特定し、この情報を使用して古いデータを更新するか、新しい行を挿入する前に古い行を削除する必要があります。

これが不可能な場合は、挿入を実行する前に必ずmy_tableまたはDROP my_tableを削除して重複がなくなるようにすることができます。これは(良いか悪いか)新しい輸入に欠けているデータがあなたのアプリの中に横たわっていないことを確認します。

関連する問題