SQLite查询仅在WHERE子句中为每个参数返回1个结果

时间:2011-06-17 20:32:56

标签: android sql sqlite

我正在尝试查询我的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而不是每个城市只有一行。我真的很茫然。

1 个答案:

答案 0 :(得分:0)

我发现问题出在前面的插入方法上。感谢您的评论。上面的代码现在工作正常。希望有人会觉得这很有用。