Room - 是否可以在查询中使用 OFFSET 和 FETCH NEXT?
Room - Is it possible to use OFFSET and FETCH NEXT in a query?
我正在尝试在 Room 数据库 android 中实现分页构建,我需要有子句 OFFSET
和 FETCH 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
动态,你可以简单地将限制作为参数传递。
我正在尝试在 Room 数据库 android 中实现分页构建,我需要有子句 OFFSET
和 FETCH 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
动态,你可以简单地将限制作为参数传递。