我正在尝试查询我的SQLite数据库中所有具有特定“城市”列的行。
以下代码遍历城市列表并创建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行。如果我将该字段保留为null,则每个城市都会有大量结果,因此我知道数据库中存储了更多结果。
这里有什么问题?这是我第一次使用SQL。
感谢。
更新
"city IN ('Victoria', 'Saanich', 'Oak Bay')"
"city='Victoria' OR city='Oak Bay' OR city='Saanich'"
这些是我尝试过的值。
更新2:
SELECT * FROM coffeeshops WHERE city = 'Victoria' UNION SELECT * FROM coffeeshops WHERE city = 'Oak Bay' UNION SELECT * FROM coffeeshops WHERE city = 'Saanich'
我按照建议使用了rawQuery并构造了上面的语句。这些更改未反映在上面的代码中。我运行它时没有错误,但结果是一样的。我尝试使用UNION而不是每个城市只有一行。我真的很茫然。
答案 0 :(得分:0)
我发现问题出在前面的插入方法上。感谢您的评论。上面的代码现在工作正常。希望有人会觉得这很有用。