2016-09-19 763 views
0

请先阅读使其重复。SQLite表约束唯一和ON CONFLICT REPLACE用法

我想在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是否强制?

Aymananswer我知道我可以在多个列上一起应用唯一的,但我仍然在插入后得到重复值。任何人都可以从我的查询中做出适当的查询,并帮助我理解所有事情由于

+0

您是否在寻找经度和纬度组合或单独唯一约束唯一约束的经度和纬度分别? –

+0

不,我希望它的两个我的意思是设置长和纬@Samuel – TapanHP

回答

0

你的表结构改成这样

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); 
+0

但什么是简单的插入方法的问题?因为在应用您的查询之后,它仍然会重复使用值。 – TapanHP

+0

已尝试卸载现有的apk?只有在重新创建数据库后才会反映新的表格定义。 –

+0

没问题! @Samuel – TapanHP