android sqlite独特插入

时间:2015-08-07 13:02:42

标签: android sqlite unique-constraint

只是一个简单的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

1 个答案:

答案 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。

希望有所帮助。