Android SQLite使用WHERE子句不返回任何结果

时间:2011-11-15 13:38:10

标签: java android sqlite

我运行了下面的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;
            }

2 个答案:

答案 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打开数据库文件并在那里运行查询以进行检查。