質問

ローカルsqliteデータベースを使用するAndroidアプリを持っています。

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:datatype mismatch "

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

アイデアはありますか

役に立ちましたか?

解決

少し混乱しているようです。 SQLiteDatabase.query ドキュメントでは、最後の引数は LIMIT 句です。最後から2番目は、 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)

他のヒント

これは私のために働いた

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);
KEY_PID + " = " + "'" + id + "'"

Orderbyはクエリの最後から2番目のパラメータです。 クエリは次のようになります

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

問題を正しく理解できたら、これを試してください。

    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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top