SQLite---使用约束

2018-10-30  本文已影响30人  None_Ling

背景

在使用SQLite建表的时候,通常会使用_id作为唯一标示,使用PRIMARY KEYAUTOCREMENT进行修饰,而主键是不可以重复的。但是在这张表中还有其他的Column也不允许重复,则可以使用Unique约束。

常用的约束有:

举例

现在有一张表,记录了本设备最近使用的App历史记录,并且按照进入的时间进行排序显示。当同一个App重复进入的时候,则需要覆盖原有Row。

那么这张表拥有四列:

步骤

注意:无论是建表时决定Conflict的处理策略还是插入时决定处理策略,Unique属性都是必须的

建表实现

创建app_access_table表,其中:

CREATE TABLE IF NOT EXISTS app_access_table (
      _id INTEGER PRIMARY KEY AUTOINCREMENT ,
      app_name TEXT UNIQUE ON CONFLICT REPLACE ,
      access_time LONG DEFAULT 10000 ,
      access_count INTEGER CHECK(access_count>0)
)

该建表语句决定了,当有新数据插入时,如果有相同app_name的话,则使用Replace策略替换原有数据

插入实现

创建app_access_table表,其中:

CREATE TABLE IF NOT EXISTS app_access_table (
      _id INTEGER PRIMARY KEY AUTOINCREMENT ,
      app_name TEXT UNIQUE ,
      access_time LONG DEFAULT 10000 ,
      access_count INTEGER CHECK(access_count>0)
)

在数据插入时使用insertWithOnConflict来决定冲突时,该如何处理,此处使用SQLiteDatabase.CONFLICT_REPLACE来决定数据冲突时,替换该条数据

db.insertWithOnConflict(TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE);

值得注意的是,SQLiteDatabase在面对Replace的处理是,首先删除原有的行,然后再把新的这一行添加到表中,替换完后,_id字段会发生变化。

其他处理策略:

上一篇 下一篇

猜你喜欢

热点阅读