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

时间:2013-04-19 21:56:59

标签: 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;
}
  • 我在数据库中有一张图片表,并且必须一次返回20行的有限列表。
  • 但是当我使用ex:QueryBuilder.offset(11).limit(30);
  • 我无法将列表限制为20行。
  • 该列表仅限于我。
  • 好像偏移始终保持值0
  • ex:(0 - 30)

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

  • 有人能帮助我吗?

1 个答案:

答案 0 :(得分:14)

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

对于offset在这种情况下的含义存在误解,下面是SQLite Documentations对此的说法

  

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

Source

根据您的查询,您将从#11行开始返回30行。

所以正确的方法是:

queryBuilder.offset(startRow).limit(20);

limit是要返回的行数,而不是结束行。

pictureList = dao.query(queryBuilder.prepare());

返回的List,第一个值从pictureList.get(0)

开始

编辑: @Gray对评论的帮助