Какая версия SQLite используется в Android?
Причина: Мне интересно, как обрабатывать миграции схем. Новые версии SQLite поддерживают SQL-команду "ALTER TABLE", которая избавит меня от необходимости копировать данные, удалять таблицу, воссоздавать таблицу и вставлять данные.
ОБНОВЛЕНИЕ OCT 2016. Ниже приведена ссылка на обновленные официальные документы, которые включают основные моменты в этом ответе: android.database.sqlite javadoc на уровне пакетов
Использование эмуляторов (оболочка adb sqlite3 --version):
UPDATE: извините, более ранние (SDK 18 и более ранние версии) API-интерфейсы на уровне пакетов перестали работать: https://issuetracker.google.com/issues/37048579
SQLite 3.19.4 (по какой-либо причине 3.19.4 не существует в примечаниях к выпуску sqlite!):
SQLite 3.18.2:
SQLite 3.9.2:
SQLite 3.8.10.2:
SQLite 3.8.6.1 (ссылка SQLite для 3.8.6, потому что 3.8.6.1 по какой-то причине не существует):
SQLite 3.8.6:
SQLite (неизвестно):
SQLite 3.7.11:
SQLite 3.7.4:
SQLite 3.6.22:
SQLite 3.5.9:
Примечание. Ссылки на уровне Android SDK показывают, где был изменен пакет android.database.sqlite. Если отсутствует ссылка (например, уровень SDK 17), не отображается никаких изменений в этом пакете.
Примечание. Вот некоторые аномалии (список отнюдь не исчерпывающий):
SQLite 3.7.13 (вместо 3.7.11):
SQLite 3.7.6.3 (вместо 3.6.22):
SQLite 3.7.5 (вместо 3.7.4):
SQLite 3.7.0.1 (вместо 3.6.22):
SQLite 3.6.23.1 (вместо 3.5.9):
Примечание: команда adb для получения версии SQLite работает только на эмуляторах и на устройствах с доступным sqlite3: https://stackoverflow.com/questions/3645319/why-do-i-get-a-sqlite3-not-found-error-on-a-rooted-nexus-one-when-i-try-to-op
Для других устройств см. Juri answer.
Я добавил Issue # 58909 в Android Issue Tracker. Пожалуйста, нажмите эту кнопку, если вы хотите ее поддержать.
Примечание. Если вы хотите, чтобы ваше приложение использовало ту же версию SQLite для всех версий Android, рассмотрите возможность использования этой сторонней библиотеки поддержки SQLite.
targetSdkVersion
или buildTarget
как-то влияют на это?
Несмотря на то, что документация дает 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.
Краткий обзор API Andorid и поддерживаемых версий SQLite.
Обзор из ссылки в ответе Марка Картера.