【发布时间】:2011-06-17 20:32:56
【问题描述】:
我正在尝试在我的 SQLite DB 中查询具有特定“城市”列的所有行。
以下代码遍历城市列表并创建 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 行。我真的很茫然。
【问题讨论】:
-
您是否尝试过使用
dbobject.rawQuery("SELECT yourthings FROM yourdb WHERE yourwhereclause")而不是结构化的?使用 SQLite,我在这方面取得了最大的成功。 -
尝试从您的代码中获取并发布生成的 sql(通过日志或调试)——这可能会有所帮助。
-
我在运行应用程序时使用 w 的实际值更新了帖子。这对我来说似乎很好。