android – 限制SQLite中的行数

android – 限制SQLite中的行数,第1张

概述我有一种情况,我只想限制表中的50行.如果用户在此之后插入一个新行,则第一行(最先插入)将被删除并插入新行,因此计数保持不变. 我知道我可以有一个rowid字段,在插入新记录时我可以检查是否已有50行,所以删除最小的rowid然后插入新的rowid.但只是想知道是否有更好的解决方案,这样我就不必做3个数据库 *** 作(1.查询#of行,2.删除最小值,3.插入) 我知道一种有效的方法,但它有点难看.它依 我有一种情况,我只想限制表中的50行.如果用户在此之后插入一个新行,则第一行(最先插入)将被删除并插入新行,因此计数保持不变.
我知道我可以有一个rowID字段,在插入新记录时我可以检查是否已有50行,所以删除最小的rowID然后插入新的rowID.但只是想知道是否有更好的解决方案,这样我就不必做3个数据库 *** 作(1.查询#of行,2.删除最小值,3.插入)解决方法 我知道一种有效的方法,但它有点难看.它依赖于精心构造的约束和播种数据库.为简洁起见,我只用了五行而不是50行.

create table test (  row_num integer primary key    check ((round(row_num) = row_num) and (row_num between 1 and 5)),other_columns char(1) not null default 'x',row_timestamp timestamp     not null unique     default current_timestamp);

表达式round(row_num = row_num)保证row_num列中有整数.否则,sqlite会让你在那里插入1.54或’wibble’.

other_columns列只是实际数据的占位符.

insert into test (row_num,row_timestamp) values(1,'2015-01-01 08:00:01'),(2,'2015-01-01 08:00:02'),(3,'2015-01-01 08:00:03'),(4,'2015-01-01 08:00:04'),(5,'2015-01-01 08:00:05');

实际的时间戳值并不意味着什么.不管怎样,还没有.像这样播种数据库意味着,从现在开始,您只需要执行更新语句.如果表开始时是空的,则必须处理插入和更新的不同逻辑.例如,您必须计算行以确定是插入还是更新.

create trigger update_timestampafter update on test for each rowbegin  update test   set row_timestamp = strftime('%Y-%m-%d %H:%M:%f','Now')  where row_num = olD.row_num;end;

“update_timestamp”触发器使sqlite以几分之一秒(%f)维护时间戳.可能取决于底层 *** 作系统是否支持分数精度.

create trigger no_deletesafter delete on testfor each rowbegin  -- There might be a more elegant way to prevent deletes.  -- This way just inserts exactly what a delete statement deletes.  insert into test (row_num,other_columns,row_timestamp)   values (olD.row_num,olD.other_columns,olD.row_timestamp);end;

现在您可以更新数据了.您更新自己的数据,这里只是占位符other_columns,sqlite负责其余的工作.

update test set other_columns = 'b' where row_timestamp = (select min(row_timestamp) from test);select * from test order by row_timestamp desc;
row_num     other_columns  row_timestamp          ----------  -------------  -----------------------1           b              2015-03-08 12:43:21.9265           x              2015-01-01 08:00:05    4           x              2015-01-01 08:00:04    3           x              2015-01-01 08:00:03    2           x              2015-01-01 08:00:02   
总结

以上是内存溢出为你收集整理的android – 限制SQLite中的行数全部内容,希望文章能够帮你解决android – 限制SQLite中的行数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1125325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存