SQLite表约束唯一和ON CONFLICT REPLACE用法

时间:2016-09-19 10:45:32

标签: android sqlite android-sqlite unique-constraint

请在重复之前阅读。

我正在尝试在SQLite表中插入经度和纬度值,并且我希望它是唯一值,经过一些研究后我发现thisthis答案非常有用,尽管它们都是是为简单的查询编写的,我无法找到如何使用唯一 ON_CONFLICTION_REPLACE

的约束来使我的查询适合

查询如下,

 private static final String CREATE_USER_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_LOCATIONS + "("
                + UID + " TEXT PRIMARY KEY," + ADDRESS + " TEXT,"
                + LONGITUDE + " TEXT unique," + LATITUDE + " TEXT unique" + ")";

但这种独特之处没有任何区别,在我的案例中使用ON_CONFLICTION_REPLACE是否有用?

Ayman' s answer我得到了我可以在多个列上一起应用唯一但我在插入后仍然会获得重复值。有人可以从我的查询中进行适当的查询并帮助我理解所有事情吗?感谢

1 个答案:

答案 0 :(得分:1)

将您的表格结构更改为此

private static final String CREATE_USER_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_LOCATIONS + "("
            + UID + " TEXT PRIMARY KEY," + ADDRESS + " TEXT,"
            + LONGITUDE + " TEXT," + LATITUDE + " TEXT,
            UNIQUE(" + LOGITUDE + "," + LATITUDE + ") ON CONFLICT REPLACE)";

然后当您执行插入时使用以下方法

ContentValues insertValues = new ContentValues();
insertValues.put(LATITUDE, latitude);
insertValues.put(LOGITUDE, longitude);
db.insertWithOnConflict(TABLE_LOCATIONS, null, insertValues, SQLiteDatabase.CONFLICT_REPLACE);