SQL-запрос Query Query с несколькими условиями
Я пишу приложение для Android, которое пытается извлечь данные из базы данных на основе двух разных критериев.
Поля тренировки и упражнения являются строками в базе данных. Я хочу вернуть курсор только с теми строками, которые удовлетворяют критериям BOTH. О, и мне также хотелось бы, чтобы он был отсортирован в порядке даты...
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;
}
Я новый кодер Android и буду благодарен за помощь!
Ответы
Ответ 1
Используйте selection
и 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;
}
Обратите внимание, что selection
String
имеет ?
место фактических значений, а фактические значения передаются как String[]
и в параметре selectionArgs
. SQLite заменит те ?
значениями из String[]
selectionArgs
.
Ответ 2
Краткий ответ: пробелы отсутствуют в "И" → "И".:
Длинный ответ: используйте маркеры параметров - вы сразу увидите пропущенные пробелы:
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);