create trigger
if not exists -- I don't actually know if you DB will support this line.
-- Might want to remove it if it's not.
example_table_limiter
on example_table
after insert
begin
delete
from example_table
where ts in (
select ts
from example_table
order by ts
limit -1 -- we don't want to limit how many rows we want to delete
offset 25 -- but we want to offset query result so it leaves 25 rows in table
);
end;
public class DataBaseSchemaHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(<trigger string from above>);
}
}
Android Room版本:
public MyDatabase extends RoomDatabase {
@Override
public void init(DatabaseConfiguration _config) {
super.init(_config);
getOpenHelper().getWritableDatabase().execSQL(<trigger string from above>);
}
}
4
请遵循以下步骤:
1>获取该表的行数
your_count = SELECT count( * ) FROM table_name;
2>如果count>(大于)20而不是获得最早的记录
SELECT *
FROM table_name
ORDER BY entry_Date ASC
LIMIT 1;
3>现在删除这些选定的记录
4>插入新数据
NOTE : if you are inserting multiple entries than put this in loop
0
以下是示例解决方案:
查询是:
@Query("SELECT * FROM user LIMIT :limit OFFSET :offset")
User[] loadAllUsersByPage(int limit,int offset);
4 回答
我认为您可以将数据插入表中,然后删除除最后20行之外的所有行(限制)
要删除,您可以使用以下查询
在这种情况下,id是设置为自动增量的主键 . 如果按日期存储,也可以使用日期作为键
假设:
你的 table 是
而且您不想关心手动运行某些查询 .
使用数据库触发器
"Offset without limit"语法的灵感来自this answer .
要在java中启用触发器:
简单的Android,您可以覆盖
SQLiteOpenHelper
:Android Room版本:
请遵循以下步骤:
1>获取该表的行数
2>如果count>(大于)20而不是获得最早的记录
3>现在删除这些选定的记录
4>插入新数据
NOTE : if you are inserting multiple entries than put this in loop
以下是示例解决方案:
查询是:
在这里,它将根据限制和偏移给出用户列表 .
如果
loadAllUsersByPage(2,0)
它会从表中返回前2行 .if
loadAllUsersByPage(2,1)
它会从表中返回第3行和第4行 .但如果
loadAllUsersByPage(-1,10)
那么它将从表中前10行 .