Android SQLite分頁查詢的三種方法
阿新 • • 發佈:2019-02-20
閒話不多說,直入話題,SQLite分頁查詢有三種方法,它們都是基於SQLite SQL查詢來的,首先我們看下SQLite分頁查詢的SQL語句,有助於我們理解:
,看到這方法是不是覺得就比方法二少了limit引數,少了limit引數還怎麼分頁啊。少了limit引數,把分頁語句寫orderBy裡面照樣能分頁。這是個歪招,利用了SQLiteDatabase最後要把所有的查詢轉換SQL語句來執行的機制,也算一種SQL注入吧,所以它兩種SQL語句都支援。這個方法寫在這裡是為了加深對SQLiteDatabase
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)
1 2 3 |
//根據clumn1列降序排序,同時帶了分頁查詢:第6行起查詢9行資料
cursor
= db.query(tableName, columns, null, null, null, null,
"clumn1
desc limit 9 offset 5" );
|