只是一个简单的SQLite问题......
我创建了一个这样的表:CREATE TABLE mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT, column2 TEXT, UNIQUE (column1, column2))
(我也尝试使用扩展名ON CONFLICT REPLACE
)
但是如果我第二次使用相同的值调用我的insert方法,它们将被添加。 E.g。
insert("one", "two");
insert("one", "two");
填写表格如下:
1 | one | two
2 | one | two
但在第二次通话后它应该是这样的:
1 | one | two
这是我的插入功能:
public void insert(String a, String b){
ContentValues contentValues = new ContentValues();
contentValues.put("column1", a);
contentValues.put("column2", b);
try {
//database.insertWithOnConflict("mytable", null, contentValues, SQLiteDatabase.CONFLICT_IGNORE);
//database.insertWithOnConflict("mytable", null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);
database.insertOrThrow("mytable", null, contentValues);
} catch (SQLiteConstraintException e) {
Log.e("insert", "SQLException: " + e.getLocalizedMessage());
}
}
修改
如果我打电话
insert("one", "two");
insert("three", "two");
表格应该像这样填写:
1 | one | two
2 | three | two
答案 0 :(得分:1)
你可以做的是用表格中的每一列写出UNIQUE
CREATE TABLE mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT UNIQUE IGNORE, column2 TEXT UNIQUE IGNORE)
忽略是,忽略非唯一的值
当发生适用的约束违规时,IGNORE解析算法会跳过包含约束违规的一行,并继续处理SQL语句的后续行,就像没有出错一样。包含约束违例的行之前和之后的其他行将正常插入或更新。使用IGNORE冲突解决算法时不会返回错误。
您已更新问题 你要做的是从你需要重复值的列中删除UNIQUE AND IGNORE FROM。
希望有所帮助。