Отличия SQLite между Android 2.1 и 2.2 - PullRequest
8 голосов
/ 18 мая 2011

У меня есть приложение для Android, и все мои тесты до сих пор проводились на моем телефоне Froyo.Я только что начал тестирование против 1.6 и 2.1 в эмуляторе, и он вылетает при запуске.Он не может найти столбец в одном из моих представлений.

05-17 23:31:31.446: ERROR/AndroidRuntime(198): Caused by: 
android.database.sqlite.SQLiteException: no such column: 
categoryTable.currentBal: , while compiling: 
SELECT SUM(categoryTable.currentBal) FROM catDisplayTable 
WHERE masterCategoryName != "__Hidden__"

Схема представления выглядит следующим образом:

CREATE VIEW catDisplayTable AS SELECT categoryTable._id, categoryTable.name,
categoryTable.currentBal, categoryTable.sequence, categoryTable.note,
masterCategoryTable.name AS masterCategoryName FROM categoryTable 
LEFT OUTER JOIN masterCategoryTable 
ON categoryTable.masterCategoryId = masterCategoryTable._id;

С adb shell, подключающимся к различным экземплярам эмулятораЯ подтвердил, что (1) правильная схема существует во всех случаях, и (2) в 1.6 и 2.1, SQLite просто не может найти столбцы в этом представлении, даже с чем-то простым, например,

* 1009.*

или

SELECT name FROM catDisplayTable;

Он отлично работает на 2.2.

Поэтому я предполагаю, что что-то изменилось в SQLite между Android 2.1 и 2.2. Этот ответ услужливо дает версии SQLite, которые поставлялись с каждым уровнем API Android.В нем говорится, что SQLite был обновлен с 3.5.9 до 3.6.22 между 2.1 и 2.2.Глядя на историю выпусков SQLite , я не вижу ничего особенно очевидного, что могло бы объяснить разницу.

Может ли кто-нибудь точно определить, что изменилось, и предложить, как мне обойти это,код работает на устройствах до Froyo?

Ответы [ 4 ]

7 голосов
/ 19 мая 2011

Я столкнулся с проблемой SQLite при использовании DISTINCT, которая, возможно, та же проблема, с которой вы столкнулись с SUM.

В более ранних версиях ОС при использовании DISTINCT мне приходилось создавать псевдонимы имен столбцов, иначе логика не работала бы с похожей, если не точно такой же ошибкой (я точно не помню, что это была за ошибка), но я думаю, они исправили это в более поздних версиях ОС.

Пример

SELECT DISTINCT _id AS _id, test AS test FROM table

работает для всех версий ОС, а

SELECT DISTINCT _id, test FROM table

потерпит неудачу для более ранних ОС

2 голосов
/ 27 мая 2011

У меня точно такая же проблема в моем приложении. Общим знаменателем является то, что я также использую виды и имею внешние ключи.

Я скачал базу данных из эмулятора. У меня нет проблем с выполнением запроса вне Android OS 2.1.

Дали ответ mp2526, но запросы с "columnx AS columnx" не имели значения. Я постараюсь выделить проблему.

0 голосов
/ 23 июля 2014

Проблема в том, что Android 2.1 возвращает столбцы вместе с именами их таблиц, поэтому запрос типа

SELECT id FROM table 

вернет один столбец с именем table.id

Решение, как уже указывалось, состоит в том, чтобы написать

SELECT id as id FROM table
0 голосов
/ 14 июня 2011

Просто столкнулся с той же проблемой. Это работает, когда я повторно просмотрел декларацию, используя нотации Column AS Column.

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