2009-05-04 8 views
30

Tengo una aplicación de Android usando una base de datos sqlite local.android: ORDER BY en la consulta

private SQLiteDatabase mDb; 

cuando funciono con esta pregunta me sale mi cursor sobre las filas con pid igual al ID, según se desee:

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

cuando corro la siguiente consulta, con el objetivo de conseguir que el mismo conjunto de resultados, ordenados por pid consigo "android.database.sqlite.SQLiteException: tipo de datos desajuste"

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

¿Alguna idea?

Respuesta

36

Parece que tienes un poco confundido. De acuerdo con la documentación SQLiteDatabase.query, el último argumento es la cláusula LIMIT. La penú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 habría pasado

Cursor query (String table, 
      String[] columns, 
      String selection, 
      String[] selectionArgs, 
      String groupBy, 
      String having, 
      String orderBy) 
+8

En la documentación también parece ser una versión: SQLiteDatabase.query (tabla, las columnas, la selección, selectionArgs, GroupBy, teniendo, orderBy) <- Anuncio de un campo (el límite) no se encuentra –

+0

que está mal , el documento mencionado también proporciona la siguiente llamada 'query (String table, String [] columns, String selection, String [] selectionArgs, String groupBy, String having, String orderBy)'. – 2ndGAB

+0

@ 2ndGAB: de hecho, el método que mencionas es el mismo que menciona Dandre y Sandip usa en su respuesta, y no es el que está en la pregunta de Bee. Tenga en cuenta que tienen aries diferentes (7 contra 9) y el suyo no toma un booleano ('distinct', del método utilizado en la pregunta). – outis

7
KEY_PID + " = " + "'" + id + "'" 
23

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); 
4

Dado que Orderby es el segundo último parámetro en la consulta; la 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); 
2

Si entendí correctamente el 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); 
+0

Agrega una explicación con la respuesta de cómo esta respuesta ayuda a OP a corregir el problema actual –

Cuestiones relacionadas