Java 带有偏移量和限制的SQLite分页问题

Java 带有偏移量和限制的SQLite分页问题,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我正在做一个如下的查询,在一页中加载10个引号 arrayList.addAll(db.loadFav(CURRENT_PAGE, Constant.ITEM_PER_PAGE)); 而DBHelper.loadFav如下所示 public ArrayList<ItemQuotes> loadFav(int offset, int limit) { ArrayList<ItemQuotes> arrayList = new ArrayList<&

我正在做一个如下的查询,在一页中加载10个引号

arrayList.addAll(db.loadFav(CURRENT_PAGE, Constant.ITEM_PER_PAGE));
DBHelper.loadFav
如下所示

 public ArrayList<ItemQuotes> loadFav(int offset, int limit) {
        ArrayList<ItemQuotes> arrayList = new ArrayList<>();
        try {
            //Cursor cursor = db.query(TABLE_QUOTES_FAV, columns_quotes, null, null, null, null, null);
            String query = "SELECT * FROM " + TABLE_QUOTES_FAV + " ORDER BY " + TAG_QUOTES_ID + " ASC "+ " LIMIT " + offset+","+limit;
            Cursor cursor = db.rawQuery(query, null);
            if (cursor != null && cursor.moveToFirst()) {
                Log.e("ABC", cursor.getCount() + "");
                for (int i = 0; i < cursor.getCount(); i++) {
    
                    String qid = cursor.getString(cursor.getColumnIndex(TAG_QUOTES_ID));
                    String quotes = cursor.getString(cursor.getColumnIndex(TAG_QUOTES));
                    String cid = cursor.getString(cursor.getColumnIndex(TAG_CAT_ID));
                    String cname = cursor.getString(cursor.getColumnIndex(TAG_CAT_NAME));
                    String quote_time = cursor.getString(cursor.getColumnIndex(TAG_QUOTE_TIME));
    
                    ItemQuotes itemQuotes = new ItemQuotes(qid, quotes, cid, cname, quote_time);
                    arrayList.add(itemQuotes);
    
                    cursor.moveToNext();
                }
                cursor.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return arrayList;
    }
public ArrayList loadFav(整数偏移量,整数限制){
ArrayList ArrayList=新的ArrayList();
试一试{
//Cursor Cursor=db.query(表\u引号\u FAV,列\u引号,null,null,null,null);
String query=“按“+TAG\u QUOTES\u ID+”ASC“+”LIMIT“+offset+”、“+LIMIT”从“+表格\u QUOTES\u FAV+”订单中选择*;
Cursor Cursor=db.rawQuery(查询,空);
if(cursor!=null&&cursor.moveToFirst()){
Log.e(“ABC”,cursor.getCount()+”);
对于(int i=0;i
在第一次调用中,当当前页面=1时,它加载10个引号,当当前页面=2时,它加载9个引号,以此类推,用于下一次调用。然而,我的表中只有11个引号……我不知道这有什么问题以及如何修复它。让我知道这里是否有人能帮我解决这个问题。谢谢

String query = "SELECT * FROM " + TABLE_QUOTES_FAV + " ORDER BY " + TAG_QUOTES_ID + " ASC "+ " LIMIT " + limit + " OFFSET "+ offset;
查询样本

SELECT * FROM
TABLE_QUOTES_FAV  LIMIT 10 OFFSET 20

当前页面=1
时,您希望
偏移量
0
,当
当前页面=2
时,您希望
偏移量
10
,依此类推。
您所做的是将
CURRENT\u PAGE
传递给
loadFav()
的参数
offset
,因此使用
CURRENT\u PAGE
作为
offset

您应该将偏移量计算为:

(CURRENT_PAGE - 1) * Constant.ITEM_PER_PAGE
因此,将sql语句更改为:

String query = 
    "SELECT * FROM " + TABLE_QUOTES_FAV + " ORDER BY " + TAG_QUOTES_ID + " ASC " + 
    "LIMIT " + ((offset - 1) * limit) + "," + limit;
但是正确的做法是将
loadFav()
的第一个参数的名称从
offset
更改为
currentPage

loadFav(int currentPage, int limit)
因此,很清楚该参数代表什么,并使用变量:

int offset = (currentPage - 1) * limit; 
然后,您可以像在代码中一样使用sql语句