我想创建一个用于存储设备设置的表。该表有三行: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()的问题是它无法阻止重复条目。
在这种情况下,是否有人知道如何防止重复输入?
答案 0 :(得分:9)
You can use the column constraint UNIQUE
.
UNIQUE约束导致在指定的列上创建唯一索引。
答案 1 :(得分:2)
我会在数据库表定义中创建一个UNIQUE CONSTRAINT。这将自动防止重复条目,它几乎是唯一的并发安全方式!
此外,如果您需要为表中的数据定义更复杂的规则,请不要忘记CHECK CONSTRAINT,这可能会更有帮助。
答案 2 :(得分:0)
您是试图通过代码还是在数据库中阻止它?
如果试图阻止代码,您需要执行SELECT并查看该行是否已存在。
如果试图阻止数据库进入数据库,则需要在不希望允许重复的任何行上添加UNIQUE约束。
答案 3 :(得分:0)
在您的情况下,正确的主键应为parameter_name
。