Android: ORDER BY en la consulta
Tengo una aplicación para Android que utiliza una base de datos sqlite local.
private SQLiteDatabase mDb;
Cuando ejecuto esta consulta obtengo mi Cursor sobre filas con pid igual a id, como se desee:
- Eliminar filas sqllite de android de más de x días
- Error desconocido (código 14): No se pudo abrir la base de datos
- IllegalArgumentException: columna no válida
- Aplicación de Android y myBatis
- ¿Cómo puedo obtener datos de una base de datos SQLITE en una matriz en android?
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, KEY_PID+" = "+id, null, null, null, null, null);
Cuando ejecuto la siguiente consulta, con el objetivo de obtener ese mismo conjunto de resultados, ordenados por pid obtengo " 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");
¿Algunas ideas?
- Caracteres especiales de Android Sqlite
- Multiple OrderBy en el método SQLiteDatabase.Query
- ¿Cómo actualizo mi ListView después de los cambios en la base de datos?
- SQLite3 FTS4, MATCH y Android
- ¿Por qué un delete rawQuery necesita un moveToFirst para eliminar realmente las filas?
- SQLite: No se puede enlazar argumento en el índice 1 porque el índice está fuera de rango. La sentencia tiene 0 parámetros
- Buscar sugerencias de diferentes tablas en diferentes actividades
- OrmLite SQLiteException: ninguna tabla
Parece que tienes un poco confundido. De acuerdo con la documentación SQLiteDatabase.query
, el último argumento es la cláusula LIMIT
. La segunda a última es la 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
Pero, también hay otro SQLiteDatabase.query
donde ORDER BY
sería el último
Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
Esto funcionó para mí
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 + "'"
Puesto que Orderby es el segundo último parámetro en la consulta; Su consulta sería así
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, KEY_PID+" = "+id, null, null, null, KEY_PID+" DESC", null);
Si he entendido correctamente su problema, intente esto.
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);
- ¿Cómo comprobar las aplicaciones actuales en ejecución en Android?
- Cómo hacer clic en un elemento dentro de un RecyclerView en Espresso