我运行了下面的sqlite查询,我知道很多不是最好的方法,但我只是想让它在目前运行。
如果我运行这两个查询,我会得到结果。
Cursor value = checkDB.rawQuery("SELECT * FROM table WHERE open ='1'", null);
Cursor value = checkDB.rawQuery("SELECT * FROM table WHERE country='"+ countryID +"'", null);
但如果我把两个where子句合并,我就没有结果。我看过一些简单的东西吗?
Cursor value = checkDB.rawQuery("SELECT * FROM table WHERE open ='1' AND country='"+ countryID +"'", null);
事实证明,我应该认为它与可扩展列表视图有关。下面是嵌套查询的完整代码。奇怪的是countryID总是输出1,但是当你点击不同的组时,会列出正确的coutries。
protected Cursor getChildrenCursor(Cursor groupCursor) {
String countryID = Integer.toString(groupCursor.getInt(0));
SQLiteDatabase checkDB = null;
checkDB = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READONLY);
Cursor value = checkDB.rawQuery("SELECT * FROM table WHERE open ='1' AND countries='"+ countryID +"'", null);
String test = "";
if(value.moveToFirst())
test = value.getInt(0) + ": " + value.getString(1);
while(value.moveToNext()){
test += ";" + value.getInt(0) + ": " + value.getString(1);
}
checkDB.close();
return value;
}
答案 0 :(得分:3)
您的查询很好,您获得的结果完全有效。请考虑以下情况:
table:
| open | country |
_____________________________
| 0 | <your country id> |
| 1 | <another id> |
然后你的两个第一个查询确实会返回一些结果,但是你的第三个查询不会。 检查您的数据,并确保您实际上同时拥有open == 1和正确的国家/地区ID的行。
如果您希望返回前两个查询的中的任何一个中的所有行,那么您应该将AND
变为OR
。并且您将获得两个第一个查询的组合结果(在我上面的示例表中,两行)
即
Cursor value = checkDB.rawQuery("SELECT * FROM table WHERE open ='1' OR country='"+ countryID +"'", null);
答案 1 :(得分:1)
查询本身没有任何问题,但是你确定有些行的开放时间= 1 AND country = whateverthevalue,同时吗?如果没有,你当然不会得到任何结果。
运行“adb shell”,使用sqlite3打开数据库文件并在那里运行查询以进行检查。