【问题标题】:SQLite query only returning 1 result per argument in WHERE clauseSQLite 查询在 WHERE 子句中每个参数只返回 1 个结果
【发布时间】: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 的实际值更新了帖子。这对我来说似乎很好。

标签: android sql sqlite


【解决方案1】:

我发现问题出在早期的插入方法上。感谢cmets。上面的代码现在可以正常工作了。希望有人会发现这很有用。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多