2009-05-04 40 views
30

我有一個使用本地sqlite數據庫的android應用程序。android:查詢中的ORDER BY

private SQLiteDatabase mDb; 

當我運行此查詢得到我的光標放在與PID等於ID行,根據需要:

mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, 
    KEY_PID+" = "+id, null, null, null, null, null);   
當我運行下面的查詢,目標是獲得相同的結果集

,有序通過PID我得到 「android.database.sqlite.SQLiteException:數據類型不匹配

mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, 
    KEY_PID+" = "+id, null, null, null, null, KEY_PID+" DESC"); 

任何想法?

回答

36

看起來你有點混淆了。根據SQLiteDatabase.query文檔,最後一個參數是LIMIT子句。倒數第二個是ORDER BY條款。

Cursor query (boolean distinct, 
      String table, 
      String[] columns, 
      String selection, 
      String[] selectionArgs, 
      String groupBy, 
      String having, 
      String orderBy, // <-- ORDER BY 
      String limit) 

編輯

不過,也有另一種SQLiteDatabase.query其中ORDER BY將是最後

Cursor query (String table, 
      String[] columns, 
      String selection, 
      String[] selectionArgs, 
      String groupBy, 
      String having, 
      String orderBy) 
+8

在本文檔中也有看起來是一個版本:SQLiteDatabase.query(表,列,選擇,selectionArgs兩個,GROUPBY,HAVING排序依據)< - 請注意一個字段(限)丟失 – 2012-06-05 23:01:44

+0

這是不對的,提到doc還給出了以下調用`查詢(String table,String [] columns,String selection,String [] selectionArgs,String groupBy,String having,String orderBy)`。 – 2ndGAB 2016-03-04 13:26:50

7
KEY_PID + " = " + "'" + id + "'" 
23

這爲我工作

String filter = MySQLiteHelper.JOB_ID + "=" + Integer.toString(jobID); 
String orderBy = MySQLiteHelper.LOG_TIME + " DESC"; 
Cursor cursor = database.query(MySQLiteHelper.LOG_TABLE_NAME, logTableColumns, 
     filter, null, null, null, orderBy); 
4

由於Orderby是查詢中倒數第二個參數; 您的查詢會是這樣

mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, 
    KEY_PID+" = "+id, null, null, null, KEY_PID+" DESC", null); 
2

如果我理解正確的話您的問題,試試這個。

String[] columns = new String[] {KEY_PID, KEY_TID}; 
    String where = KEY_PID + " = " + Integer.toString(id); 
    String orderBy = KEY_PID + " DESC"; 

    Cursor cursor = mDb.query(PT_TABLE, columns, where, null, null, null, orderBy);