android:查询中的ORDER BY

Bee*_*Bee 32 sqlite android

我有一个使用本地sqlite数据库的Android应用程序.

private SQLiteDatabase mDb;
Run Code Online (Sandbox Code Playgroud)

当我运行这个查询时,我根据需要将我的Cursor放在pid等于id的行上:

mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, 
    KEY_PID+" = "+id, null, null, null, null, null);        
Run Code Online (Sandbox Code Playgroud)

当我运行以下查询,旨在获得相同的结果集,由pid命令我得到" android.database.sqlite.SQLiteException:datatype mismatch "

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

有任何想法吗?

out*_*tis 38

看起来你有点混淆了.根据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)
Run Code Online (Sandbox Code Playgroud)

编辑

不过,也有另一种SQLiteDatabase.query这里ORDER BY将是最后一次

Cursor query (String table, 
            String[] columns, 
            String selection, 
            String[] selectionArgs, 
            String groupBy, 
            String having, 
            String orderBy)
Run Code Online (Sandbox Code Playgroud)

  • 在文档中也看起来是一个版本:SQLiteDatabase.query(table,columns,selection,selectionArgs,groupBy,having,orderBy)< - 注意缺少一个字段(限制) (8认同)

San*_*hav 24

这对我有用

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);
Run Code Online (Sandbox Code Playgroud)


小智 7

KEY_PID + " = " + "'" + id + "'"
Run Code Online (Sandbox Code Playgroud)