在QueryBuilder中使用limit()和offset()(ANDROID,ORMLITE)

fab*_*sch 6 android list limit offset ormlite

@SuppressWarnings("deprecation")
public List<Picture> returnLimitedList(int offset, int end) {
    List<Picture> pictureList = new ArrayList<Picture>();
    int startRow = offset;
    int maxRows = end;
    try {
        QueryBuilder<Picture, Integer> queryBuilder = dao.queryBuilder();
        queryBuilder.offset(startRow).limit(maxRows);
        pictureList = dao.query(queryBuilder.prepare());
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return pictureList;
}
Run Code Online (Sandbox Code Playgroud)
  • 我在数据库中有一张图片表,并且必须一次返回20行的有限列表.
  • 但是当我使用ex:QueryBuilder.offset(11).limit(30);
  • 我不能将列表限制为20行.
  • 该列表仅限于我.
  • 就像偏移始终保持值0一样
  • 例如:(0 - 30)

  • 有没有其他方法可以返回初始索引和结束索引的有限列表?

  • 谁能帮助我?

Rig*_*tti 16

这个问题是在两个月前被问到的,但如果有人偶然发现了和我一样的问题,我会回答.

对于offset这种情况下的含义存在误解,这里遵循SQLite Documentations所说的内容

如果表达式具有OFFSET子句,则从SELECT语句返回的结果集中省略前M行,并返回接下来的N行,其中M和N分别是OFFSET和LIMIT子句求值的值.

资源

根据您的查询,您将从#11行返回30行.

所以正确的方法是:

queryBuilder.offset(startRow).limit(20);
Run Code Online (Sandbox Code Playgroud)

具有limit将返回的行数,而不是结束行.

pictureList = dao.query(queryBuilder.prepare());
Run Code Online (Sandbox Code Playgroud)

并返回List第一个值开始pictureList.get(0)

编辑: @Gray对评论的帮助