Android SQLite и проблема с переменными связывания - PullRequest
2 голосов
/ 24 августа 2010

Я пытаюсь выполнить относительно простую побитовую операцию запроса с SQLite на Android.Когда я использую переменные связывания, я не получаю данных, возвращаемых, когда считаю, что нужно вернуть некоторые строки.Если я жестко закодирую значение переменной связывания непосредственно в SQL, он работает просто отлично.Я думаю, что у меня где-то есть какая-то глупая проблема с синтаксисом, но я просто не вижу ее.

Так что этот код работает просто отлично:

String selection = new String(FLAGS + " & 2 = 2");
cursor = db.query(TABLE_NAME, ALL_COLUMNS, selection,
    null, null, null, null, null );

Однако этот код (с использованием переменных связывания)), не возвращает строк:

String selection = new String(FLAGS + " & ? = ?");
String[] selectionArgs = new String[]{"2", "2"};
cursor = db.query(TABLE_NAME, ALL_COLUMNS, selection,
    selectionArgs, null, null, null, null );

Они оба приводят к созданию синтаксически идентичного запроса, когда я проверяю свойство mQuery курсора через отладчик.В последнем случае свойство mBindArgs также заполняется правильно.Я в растерянности относительно того, как это может быть неудачным.Не выдается никаких исключений или чего-то в этом роде, он просто не возвращает никаких строк.

Я могу взять ошибочный запрос, вручную поменять местами вопросительные знаки и вставить его в интерфейс командной строки ADB SQLite иэто работает просто отлично.

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Я столкнулся с той же проблемой, что и ваша.Как сказал radek-k, запрос сравнивает строку.

Одним из возможных решений является использование следующего:

String selection = new String(FLAGS + " & ? = (0|?)");
1 голос
/ 24 августа 2010

Если я прав, второй запрос выдает следующее условие:

& '2' = '2'

вместо

& 2 = 2

Попробуйте заменить & на AND

Makeуверен, что у вас нет ? символов в константе FLAG.

Кроме того, в чем смысл этого логического условия?

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