SQLite:防止重复

时间:2009-07-09 16:50:31

标签: sql database android sqlite

我想创建一个用于存储设备设置的表。该表有三行:id,parameter_name和parameter_value。

该表是通过执行以下查询语句创建的:

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()的问题是它无法阻止重复条目。

在这种情况下,是否有人知道如何防止重复输入?

4 个答案:

答案 0 :(得分:9)

You can use the column constraint UNIQUE.

  

UNIQUE约束导致在指定的列上创建唯一索引。

答案 1 :(得分:2)

我会在数据库表定义中创建一个UNIQUE CONSTRAINT。这将自动防止重复条目,它几乎是唯一的并发安全方式!

此外,如果您需要为表中的数据定义更复杂的规则,请不要忘记CHECK CONSTRAINT,这可能会更有帮助。

答案 2 :(得分:0)

您是试图通过代码还是在数据库中阻止它?

如果试图阻止代码,您需要执行SELECT并查看该行是否已存在。

如果试图阻止数据库进入数据库,则需要在不希望允许重复的任何行上添加UNIQUE约束。

答案 3 :(得分:0)

在您的情况下,正确的主键应为parameter_name