Room - 是否可以在查询中使用 OFFSET 和 FETCH NEXT?

Room - Is it possible to use OFFSET and FETCH NEXT in a query?

我正在尝试在 Room 数据库 android 中实现分页构建,我需要有子句 OFFSETFETCH NEXT 这不允许我使用,使用这些子句实现查询的方法是什么。做了一些研究,但没有得到结果。我试图在 ROOM dao 上实现的 SQL 查询如下所示:

SELECT * FROM Persons ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

我就是这样实现的,而且效果很好:

(Kotlin 样本)

SELECT * FROM Persons WHERE name LIKE :param LIMIT :pageSize OFFSET :pageIndex

其中:

  • PARAM = 搜索条件,

  • PAGESIZE = 每页 return 的行数,

  • PAGEINDEX = 到哪个页面 return

接受的答案几乎是正确的,以下对我有用:

SELECT * FROM Persons 
WHERE name LIKE :param 
LIMIT :pageSize 
OFFSET :pageIndex * :pageSize

对我有用的是这样的:

@Query("SELECT * FROM Persons ORDER BY id DESC LIMIT 20 OFFSET :offset")
List<Persons> getList(int offset);

我这样称呼它:

public void loadData(int page){
      List<Persons> list = AppDb.getAppDatabase(context).getDAO().getList((page - 1) * 20);
}

这样,当您的页码增加时,系统会自动管理偏移量并每页加载 20 条记录。如果你想设置 page size 动态,你可以简单地将限制作为参数传递。