Android SQLite не возвращает результатов, используя предложение WHERE - PullRequest
3 голосов
/ 15 ноября 2011

У меня запущен приведенный ниже 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, но при нажатии на другую группу отображаются правильные страны.

           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 ]

3 голосов
/ 15 ноября 2011

Ваши запросы в порядке, и результаты, которые вы получаете, совершенно верны.Рассмотрим следующую ситуацию:

table:
| open |   country          |
_____________________________
|  0   |  <your country id> |
|  1   |   <another id>     |

Тогда ваши два первых запроса действительно вернут некоторый результат, а ваш третий - нет.Проверьте свои данные и убедитесь, что у вас есть строки с открытым == 1 и правильным идентификатором страны одновременно.

Если вы хотите вернуть все строки из , либо одну изваши первые два запроса, затем вы должны превратить ваш AND в OR.И вы получите объединенные результаты ваших первых двух запросов (в приведенном выше примере таблицы, две строки)

т.е.

Cursor value = checkDB.rawQuery("SELECT * FROM table WHERE open ='1' OR country='"+ countryID +"'", null);
1 голос
/ 15 ноября 2011

В самом запросе нет ничего плохого, но вы уверены, что есть строки, в которых есть столбцы с open = 1 AND country = whateverthevalue, одновременно ?Если нет, вы, конечно, не получите никакого результата.

Запустите "adb shell", откройте файл базы данных с помощью sqlite3 и выполните запрос там, чтобы проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...