android: ORDER BY na consulta
Pergunta
Eu tenho um aplicativo Android usando um banco de dados SQLite local.
private SQLiteDatabase mDb;
quando eu executar essa consulta eu recebo o meu cursor sobre linhas com pid igual a id, conforme desejado:
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, null);
quando eu executar a consulta a seguir, com o objetivo de obter esse mesmo conjunto de resultados, ordenados por get pid I " android.database.sqlite.SQLiteException: tipo de dados incompatibilidade "
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, KEY_PID+" DESC");
Todas as idéias?
Solução
Parece que você tem apenas um pouco acima mista. De acordo com o documentação SQLiteDatabase.query
, o último argumento é a cláusula LIMIT
. O segundo e último é a cláusula ORDER BY
.
Cursor query (boolean distinct,
String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy, // <-- ORDER BY
String limit)
Editar
Mas, há também uma outra SQLiteDatabase.query
, onde ORDER BY
seria o último
Cursor query (String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy)
Outras dicas
Isso funcionou para mim
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 + "'"
Desde orderBy é o segundo último parâmetro na consulta; sua consulta seria assim
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, KEY_PID+" DESC", null);
Se bem entendi o seu problema, tente isso.
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);