2009-07-09 231 views
2

我想創建一個表來存儲設備設置。該表有三行:id,parameter_name和parameter_value。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