如何限制给定表的记录总数?

时间:2014-05-21 12:15:10

标签: android sqlite android-sqlite

我正在使用sqlite3作为Android应用程序的缓存工具。

基本上,服务定期从服务器获取数据,并将新记录插入sqlite3表中。然后使用该数据在活动和片段内填充UI。

因为数据是短暂的,所以不需要长期持久化。

为了节省空间和资源,我怎样才能确保只保留最近的100条记录,并自动删除较旧的条目?

我听说过TRIGGERS但不太确定如何实现它们。任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

按照步骤

1)在表格中添加一列"时间戳"

2)在插入过程中,记录设置了"时间戳"当前时间以毫秒为单位。

3)像这样创建触发器

CREATE TRIGGER yourtriggername AFTER INSERT 
ON yourtable WHEN (SELECT COUNT(*) FROM yourtable) >100
BEGIN
DELETE FROM yourtable WHERE timestamp = (SELECT MIN(timestamp) FROM yourtable)
END

4)替换" yourtable"使用实际的表名

5)每次调用上面的触发器并检查表中的总记录是否超过100,它将删除其记录的"时间戳"是最低限度的。

答案 1 :(得分:0)

select entry_id
from entries
order by create_date desc
limit 1 offset 100;


delete from entries where create_date < 
    (select create_date from entries where entry_id = obtained_entry_id);

或者只是:

delete from entries where create_date < 
    (select create_date from entries by create_date desc limit 1 offset 100);

触发执行:

CREATE TRIGGER truncate_entries AFTER INSERT ON entries 
  BEGIN
    --the delete statement from above
  END;