首页 文章

限制房间数据库中的行数

提问于
浏览
3

如何通过 removing the oldest item in the row and inserting the newest one 限制Android Session 室数据库中的行数?

在向数据库添加项目时,我猜它是一个标准查询?

编辑:我想限制数据库表的最大行数为20 . 如果达到该限制,我们删除最旧的项目,并通过将当前行计数保持为20来插入新项目 .

4 回答

  • 0

    我认为您可以将数据插入表中,然后删除除最后20行之外的所有行(限制)

    要删除,您可以使用以下查询

    DELETE FROM tableName where id NOT IN(SELECTName from tableName ORDER BY id DESC LIMIT 20)

    在这种情况下,id是设置为自动增量的主键 . 如果按日期存储,也可以使用日期作为键

  • 4

    假设:

    你的 table 是

    create table example_table (
      ts timestamp,
      uid number(19),
      some_other_field varchar(64)
    );
    

    而且您不想关心手动运行某些查询 .

    使用数据库触发器

    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;
    

    "Offset without limit"语法的灵感来自this answer .

    要在java中启用触发器:

    简单的Android,您可以覆盖 SQLiteOpenHelper

    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);
    

    在这里,它将根据限制和偏移给出用户列表 .

    如果 loadAllUsersByPage(2,0) 它会从表中返回前2行 .

    if loadAllUsersByPage(2,1) 它会从表中返回第3行和第4行 .

    但如果 loadAllUsersByPage(-1,10) 那么它将从表中前10行 .

相关问题