Версия SQLite используется в Android?
Какая версия SQLite используется в Android?
Причина: мне интересно, как обрабатывать схемы миграции. Более новые версии SQLite поддерживают команду SQL "ALTER TABLE", которая избавила бы меня от необходимости копировать данные, удалять таблицу, пересоздавать таблицу и вставлять данные заново.
4 ответа
ОБНОВЛЕНИЕ ОКТЯБРЯ 2016: Вот ссылка на обновленные официальные документы, которые включают в себя основные пункты этого ответа: javadoc уровня пакета android.database.sqlite
Использование эмуляторов (adb shell sqlite3 --version):
ОБНОВЛЕНИЕ: Извините, старые версии API (SDK 18 и более ранние версии) перестали работать на уровне пакета: https://issuetracker.google.com/issues/37048579
SQLite 3.22.0:
- 28-9.0-P (Редакция 5 в SDK Manager)
SQLite 3.19.4 (по какой-то причине 3.19.4 не существует в заметках о выпуске sqlite!, Поэтому вместо ссылки на проверки версий):
- 27-8.1.0-O MR1
SQLite 3.18.2:
- 26-8.0.0-O (примечание: использовались бета-версии O 3.18.0)
SQLite 3.9.2:
- 25-7.1.1-N MR1
- 24-7.0-N (примечание: для предварительного просмотра использовалась одна и та же версия)
SQLite 3.8.10.2:
- 23-6.0-M (примечание: M Preview 1 (SDK level 22) используется 3.8.10)
SQLite 3.8.6.1 (ссылка на SQLite для 3.8.6, потому что 3.8.6.1 по какой-то причине не существует):
- 22-5.1.1-леденец
SQLite 3.8.6:
- 21-5.0-леденец
SQLite (неизвестно):
- 20-4.4W.2-Android Wear (эмулятор недоступен, но возможно либо 3.7.11, либо 3.8.4.3)
SQLite 3.7.11:
- 19-4.4-KitKat
- 18-4,3-желейные бобы
- 17-4,2-желейные бобы
- 16-4,1-желейные бобы
SQLite 3.7.4:
SQLite 3.6.22:
- 10-2.3.3-Gingerbread
- 9-2.3.1-Gingerbread
- 8-2,2-Фройо
SQLite 3.5.9:
- 7-2.1-Эклер
- 4-1.6-пончик
- 3-1,5-кекс
Примечание. Ссылки уровня Android SDK показывают, где изменился пакет android.database.sqlite. Там, где нет ссылки (например, уровень SDK 17), указывает на отсутствие изменений в этом пакете.
Примечание. Вот некоторые аномалии (список отнюдь не исчерпывающий):
SQLite 3.7.13(вместо 3.7.11):
- LG Optimus L70 MS323 LGMS323 | KOT49I.MS32310b (19-4.4-KitKat)
- LG Optimus G E975 LG-E975 | JZO54K (16-4,1-желейные бобы)
- LG G2 D802 LG-D802 | JDQ39B (17-4,2-Jelly Bean)
SQLite 3.7.6.3(вместо 3.6.22):
- LG Optimus Sol E730 / myTouch E739 / myTouch Q C800 (10-2.3.3-Gingerbread, GRJ22)
- LG Optimus Vu F100S / F100L (пряники 10-2.3.3, RK39F)
- LG Optimus LTE TAG F120K / F120L (пряники 10-2.3.3, GRK39F)
- LG Optimus LTE L-01D (10-2.3.3-пряник, GRJ90)
- LG Optimus Net P690b (пряники 10-2.3.3, имбирь)
- LG Prada KU5400 (10-2.3.3-Gingerbread, GWK74)
- LG Prada P940 (10-2.3.3-Gingerbread, GWK74)
- LG LU6200 / SU640 (10-2.3.3-Gingerbread, GRJ90) s
SQLite 3.7.5(вместо 3.7.4):
- Samsung Galaxy Note (15-GT-N7000 | IML74K.ZSLPF)
- Samsung Galaxy SII (15-SC-02C | IML74K.OMMP4 и GT-I9100 | IML74K.DXLP7)
- Samsung Galaxy S Duos (15-GT-S7562 | IMM76I.S7562XXBMD6)
- Samsung Galaxy Tab 7.7 (15-GT-P6810 | IMM76D.ZSLP8)
SQLite 3.7.0.1(вместо 3.6.22):
- LG Esteem MS910 (10-2.3.3-Gingerbread, GSE-_v.05)
- AndroTab (8-2.2-Froyo, 1.0.7100.0385)
- GPLUS MUSN M500 (8-2.2-Froyo, FRG83G)
SQLite 3.6.23.1(вместо 3.5.9):
- Motorola Backflip MB300 (7-2.1-Эклер, ERD79)
- Garmin-Asus nüvifone A10 / A50 / Garminfone (7-2.1-Эклер, ERE27)
Примечание: команда adb для получения версии SQLite работает только на эмуляторах и на устройствах с sqlite3: /questions/891076/pochemu-ya-poluchayu-oshibku-sqlite3-not-found-na-ukorenennom-nexus-one-kogda-pyitayus-otkryit-bazu-dannyih-s-pomoschyu-obolochki-adb/891105#891105
Для других устройств см . Ответ Юри.
Я добавил проблему № 58909 в систему отслеживания проблем Android. Пожалуйста, пометьте это, если хотите поддержать.
Примечание. Если вы хотите, чтобы ваше приложение использовало одну и ту же версию SQLite во всех версиях Android, рассмотрите возможность использования сторонней библиотеки поддержки SQLite.
Хотя документация дает номер 3.4.0 в качестве ссылочного номера, если вы выполните следующий sql, вы заметите, что установлено гораздо большее количество SQlite:
Cursor cursor = SQLiteDatabase.openOrCreateDatabase(":memory:", null).rawQuery("select sqlite_version() AS sqlite_version", null);
String sqliteVersion = "";
while(cursor.moveToNext()){
sqliteVersion += cursor.getString(0);
}
Это просто быстрый грязный код для получения версии sqlite. Например на HTC Hero с Android 2.1 я получаю: 3.5.9.
На моем Nexus One с Android 2.2 я даже получаю 3.6.22.
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9
То же самое на эмуляторе ADP1 1.6 и 2.1.