1. 程式人生 > >Android SQLite分頁查詢的三種方法

Android SQLite分頁查詢的三種方法

  閒話不多說,直入話題,SQLite分頁查詢有三種方法,它們都是基於SQLite SQL查詢來的,首先我們看下SQLite分頁查詢的SQL語句,有助於我們理解:
1 2 3 4 5 6 #查詢第一行起的5行資料,可以有兩種語句: #第一種語句: select * from T_user limit 5 offset 0; #第二種語句: select * from T_user limit 0,5;

然後,回來過頭看分頁查詢方法:

方法一:使用SQLiteDatabase.rawQuery()方法,這是網上介紹得最多的方法,因為直接寫SQL語句,所以兩種SQL語句它都支援,示例如下:
1 2 String sql= "select * from table Limit 100 Offset 2"
;    Cursor rec = db.rawQuery(sql, null);

方法二:使用SQLiteDatabase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) ,它是基於第二種SQL語句的。這個google出來,好像比較少介紹,不知道為什麼。我更傾向於這種方法,能夠使用Android API提供的簡便方法,就使用簡便方法,除非它不能滿足功能需求,這也是我寫程式碼的原則

1 2 3 4 5 6 7 8 9 10 11 12 /** * table="表命", * columns="要查詢的列名", * selection="查詢 條件", * selectionArgs="條件中用了佔位符的引數", * groupBy="資料分組", * having="分組後的條件", * orderBy="排序方式", * limit="分頁查詢";  **/ cursor= db.query(TableName, null, null, null,null, null, null, "5,9");//"5,9",第6行開始,返回9行資料

方法三:使用SQLiteDatabase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

,看到這方法是不是覺得就比方法二少了limit引數,少了limit引數還怎麼分頁啊。少了limit引數,把分頁語句寫orderBy裡面照樣能分頁。這是個歪招,利用了SQLiteDatabase最後要把所有的查詢轉換SQL語句來執行的機制,也算一種SQL注入吧,所以它兩種SQL語句都支援。這個方法寫在這裡是為了加深對SQLiteDatabase SQL操作的理解,非特別需求不建議使用,程式碼示例如下:

1 2 3 //根據clumn1列降序排序,同時帶了分頁查詢:第6行起查詢9行資料 cursor = db.query(tableName, columns, null, null, null, null, "clumn1 desc limit 9 offset 5");