2009-07-09 25 views
2

デバイス設定を保存するテーブルを作成したいと思います。このテーブルには、id、parameter_name、およびparameter_valueという3つの行があります。SQLite:重複を防ぐ

表は次のクエリステートメントを実行することによって作成された:

DATABASE_CREATE = "create table DATABASE_TABLE (KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT, KEY_NAME INTEGER not null, VALUE TEXT not null); 

、次いで行は、以下の方法を実行することにより、格納されている:

private long insertRow(int rowParameter, String rowValue, SQLiteDatabase db){ 
    long res = -1; 
    ContentValues settingsParameterValues = new ContentValues(); 
    settingsParameterValues.put(KEY_NAME, rowParameter); 
    settingsParameterValues.put(VALUE, rowValue); 
    if(db != null){ 
     res = db.insert(DATABASE_TABLE, null, settingsParameterValues); 
    } 
    return res; 
} 

データベースは、デフォルト値が作成されると格納される:

@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 
     insertRow(PRIVACY_LEVEL_ROW_INDEX, "0", db); 
     insertRow(STREAM_TITLE_ROW_INDEX, "untitled", db); 
     insertRow(STREAM_TAGS_ROW_INDEX, "", db); 
    } 

ただし、insertRow()の問題エントリの重複を防ぐことはできません。

誰もこの場合重複したエントリを防ぐ方法を知っていますか?

答えて

2

データベーステーブル定義にUNIQUE CONSTRAINTを作成します。それは自動的に重複したエントリを防止し、それを実行するための唯一の並行処理安全な方法です!

また、テーブルのデータにさらに複雑なルールを定義する必要がある場合に役立つCHECK CONSTRAINTについても忘れないでください。

0

あなたはコードやデータベースでそれを防止しようとしていますか?

コードを防ぐためにSELECTを実行し、その行がすでに存在するかどうかを確認する必要があります。

データベースからのアクセスを防止するには、重複を許可したくない行にUNIQUE制約を追加する必要があります。

0

正しいプライマリキーはparameter_nameでした。

関連する問題