2011-06-13 9 views
12

Estoy escribiendo una aplicación de Android que está tratando de extraer datos de una base de datos en función de dos criterios distintos.Formulación de SQL Android Query con varias condiciones

Los campos de entrenamiento y ejercicio son dos cadenas en la base de datos. Quiero devolver un cursor con solo aquellas filas que satisfacen AMBOS criterios. Ah, y también me gustaría que se ordenará por orden de fecha ...

public Cursor graphQuery(String exercise, String workout) { 
    Cursor cursor = mDb.query(DATABASE_TABLE, new String [] {KEY_DATE, KEY_REPS,  
     KEY_REPS_FEEL, KEY_WEIGHT, KEY_WEIGHT_FEEL}, "KEY_WORKOUT=" + workout + "AND" + 
     "KEY_EXERCISE=" + exercise, null , null, null, KEY_DATE); 

    return cursor; 
} 

Soy un nuevo codificador androide y agradecería la ayuda!

+1

Usted podría hacer que tu código funcione al citar el 'workout' y' exercise' en la cadena 'selection'. Sin embargo, este no es el enfoque preferido. Vea mi respuesta sobre cómo usar correctamente el parámetro 'selectionArgs'. –

Respuesta

29

Uso selection y selectionArgs:

public Cursor graphQuery(String exercise, String workout) { 
    Cursor cursor = mDb.query(DATABASE_TABLE, new String [] {KEY_DATE, KEY_REPS,  
     KEY_REPS_FEEL, KEY_WEIGHT, KEY_WEIGHT_FEEL}, "KEY_WORKOUT = ? AND KEY_EXERCISE = ?", 
     new String[] { workout, exercise }, 
     null, 
     null, 
     KEY_DATE); 

    return cursor; 
} 

Aviso cómo el selectionString tiene ? s in-situ de los valores reales y los valores reales son pasadas como String[] y en el selectionArgs parametro. SQLite reemplazará aquellos ? s con los valores del String[]selectionArgs.

+0

Ah, estaba intentando descubrir cómo usar el?. Había renunciado a esos. Parece que me equivoqué bastante en las citas. ¡Gracias por la respuesta rápida! Todavía tengo una fuerza cerca para descubrir, pero al menos sé que el código es correcto ahora. – easycheese

+0

Impresionante, gracias Steve! – Soham

1

Respuesta corta: Hay espacios que faltan en torno a "Y" -> "Y":

Respuesta larga: Utilice marcadores de parámetros - verá espacios que faltan inmediatamente a continuación:.

Cursor cursor = mDb.query(DATABASE_TABLE, new String [] { KEY_DATE, KEY_REPS,  
     KEY_REPS_FEEL, KEY_WEIGHT, KEY_WEIGHT_FEEL }, "KEY_WORKOUT=? and KEY_EXERCISE=?", new String[] { workout, exercise }, null, null, KEY_DATE);