7
@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
  • 例如:(0 - 30)

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

  • 有人可以帮我吗?
4

1 回答 1

16

这个问题是两个月前提出的,但如果有人偶然发现与我相同的问题,我会回答。

对这种情况下的含义存在误解offset,以下是 SQLite Documentation 所说的

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

资源

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

所以正确的做法是:

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

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

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

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

编辑: @Gray 对评论的帮助

于 2013-06-20T17:43:06.477 回答