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;
}
  • データベースに Pictures のテーブルがあり、一度に 20 行の限られたリストを返さなければなりません。
  • しかし、例を使用する場合: QueryBuilder.offset(11).limit(30);
  • 20行限定のリストは返せません。
  • リストは限界でしか私に来ません。
  • あたかもオフセットが常に値0のままであるかのようです
  • 例: (0 - 30)

  • 初期インデックスと終了インデックスの限られたリストを返す他の方法はありますか?

  • 誰でも私を助けることができますか?
4

1 に答える 1

16

この質問は 2 か月前に出されたものですが、私と同じ問題に遭遇した人がいればお答えします。

この場合の意味について誤解がありoffsetます。ここでは、SQLite ドキュメンテーションがそれについて述べていることに従います。

式に 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 に答える