我正在使用sqlite3作为Android应用程序的缓存工具。
基本上,服务定期从服务器获取数据,并将新记录插入sqlite3表中。然后使用该数据在活动和片段内填充UI。
因为数据是短暂的,所以不需要长期持久化。
为了节省空间和资源,我怎样才能确保只保留最近的100条记录,并自动删除较旧的条目?
我听说过TRIGGERS但不太确定如何实现它们。任何指针都会受到赞赏。
答案 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;