Android: ORDER BY dans la requête
Question
J'ai une application Android utilisant une base de données sqlite locale.
private SQLiteDatabase mDb;
Lorsque j'exécute cette requête, mon curseur est placé sur des lignes dont le pid est égal à id, comme souhaité:
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, null);
lorsque j'exécute la requête suivante dans le but d'obtenir le même ensemble de résultats, classé par pid, j'obtiens " android.database.sqlite.SQLiteException: incompatibilité de types de données ".
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, KEY_PID+" DESC");
Des idées?
La solution
Il semblerait que vous soyez un peu mélangé. Selon le SQLiteDatabase.query
, le dernier argument est la clause LIMIT
. L’avant-dernière colonne est la clause ORDER BY
.
Cursor query (boolean distinct,
String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy, // <-- ORDER BY
String limit)
MODIFIER
Mais il existe aussi un autre SQLiteDatabase.query
où ORDER BY
serait le dernier
Cursor query (String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy)
Autres conseils
Cela a fonctionné pour moi
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 + "'"
Puisque Orderby est le dernier dernier paramètre de la requête; votre requête serait comme ça
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, KEY_PID+" DESC", null);
Si j'ai bien compris votre problème, essayez ceci.
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);