Я пытаюсь запросить в моей базе данных SQLite все строки, в которых есть определенный столбец "city".
Следующий код просматривает список городов и создает предложение WHERE.
w = PlacesProvider.KEY_CITY + " IN " + "(" + "'" + PlacesSearch.currentCity.get(0) + "'";
for (int i = 1; i < PlacesSearch.currentCity.size(); i++) {
w = w + ", " + "'" + PlacesSearch.currentCity.get(i) + "'";
}
w = w + ")";
//Result looks like "city IN ('city1', 'city2')"
// Get ContentResolver
ContentResolver cr = getContentResolver();
// Get Cursor
Cursor c = cr.query(PlacesProvider.CONTENT_URI, null, w, null, null);
Я также пробовал это предложение WHERE, которое дает точно такой же результат.
w = PlacesProvider.KEY_CITY + " = " + "'" + PlacesSearch.currentCity.get(0) + "'";
for (int i = 1; i < PlacesSearch.currentCity.size(); i++) {
w = w + " OR " + PlacesProvider.KEY_CITY + " = " + "'" + PlacesSearch.currentCity.get(i) + "'";
}
//Result looks like "city = 'city1' OR city = city2 OR city = city3"
Затем я перебираю результаты и использую данные:
if (c.moveToFirst()) {
do {
//Do some stuff
} while (c.moveToNext());
}
Проблемаявляется то, что запрос возвращает только 1 строку из каждого города.Если я оставлю поле пустым, в каждом городе будет много результатов, поэтому я знаю, что в БД хранится больше.
Что здесь не так?Я впервые использую SQL.
Спасибо.
Обновление:
"city IN ('Victoria', 'Saanich', 'Oak Bay')"
"city='Victoria' OR city='Oak Bay' OR city='Saanich'"
Это значения w, которые я пробовал.
Обновление2:
SELECT * FROM coffeeshops WHERE city = 'Victoria' UNION SELECT * FROM coffeeshops WHERE city = 'Oak Bay' UNION SELECT * FROM coffeeshops WHERE city = 'Saanich'
Я использовал rawQuery, как было предложено, и построил приведенное выше утверждение.Эти изменения не отражены в коде выше.Нет ошибок при запуске, но результат тот же.Я попытался использовать UNION вместо этого, и я все еще получаю только 1 строку для каждого города.Я действительно в растерянности.