Один из моих андроид приложений не выполняет следующий конкретную SQLite запроса:Android SQLiteException: нет такой колонки: -1
SELECT _id, hourMin, actions FROM profiles
WHERE type=2 AND hourMin > -1 AND days & 8 != 0 AND prof_id >> 16 IN (256)
ORDER BY hourMin ASC LIMIT 1
Теперь, который работает на некоторых Android телефонов, но на некоторых из них он выходит из строя со следующим ошибка:
android.database.sqlite.SQLiteException: no such column: -1: , while
compiling: SELECT _id, hourMin, actions FROM profiles WHERE type=2 AND
hourMin > -1 AND days & 8 != 0 AND prof_id >> 16 IN (256) ORDER BY hourMin
ASC LIMIT 1
по какой-то причине, «-1» интерпретируется как столбец, а не числом ... что не имеет особого смысла, и когда я прочитал язык SQLite запросов Я не вижу никакой необходимости, чтобы избежать это число в круглых скобках. Может быть, это проблема другой версии SQLite? Будет ли добавление скобок, это поможет? Вместо этого я, вероятно, перепишу его, используя> = 0, но все же хочу понять, что происходит.
Попробуйте обернуть его в круглые скобки и посмотреть, помогает ли он любому. Это может быть проблема с группировкой в заявлении или чем-то еще. Если бы я был вами, я бы вычислил номер версии sqlite на каждом телефоне, чтобы у вас была точка сравнения. – avpx
Да, это то, что я сделаю, но это случайный снимок. Мне нравится понимать мои исправления :-) К сожалению, я получаю сообщения от пользователей, у меня нет доступа к телефонам самостоятельно. На самом деле пользователю сложно даже догадаться, какая версия SQLite имеет их телефон. На самом деле не могу попросить их настроить ADB на свой телефон, установить SDK на свой рабочий стол, подключить свой телефон через USB и запустить некоторую загадочную командную строку ... :-) – ralfoide
Я не знаю, какие версии SQLite могут даже работать на Android, так что я не буду подвергать опасности это как нечто большее, чем комментарий. Но из журнала изменений я вижу, что побитовые операторы не всегда существовали. Легко представить, что конкретная ошибка, если парсер не распознает побитовые операторы в инструкции. Кроме того, приоритет ~ был зафиксирован в 3.5.3. Опять же, я не знаю, но могу себе представить, что ошибка с приоритетом с ~ также существовала бы с отрицанием (маловероятным, но не полностью исключающим). –