Версия SQLite используется в Android?

240

Какая версия SQLite используется в Android?

Причина: Мне интересно, как обрабатывать миграции схем. Новые версии SQLite поддерживают SQL-команду "ALTER TABLE", которая избавит меня от необходимости копировать данные, удалять таблицу, воссоздавать таблицу и вставлять данные.

  • 1
    Вы все еще можете скопировать-отбросить-воссоздать-заново вставить; ALTER TABLE в SQLite не очень полнофункциональный.
  • 0
    Пожалуйста, выберите правильный ответ, 3.4.0 не правильно
Показать ещё 2 комментария
Теги:
database
schema
migration

4 ответа

444

ОБНОВЛЕНИЕ 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!):

  • 27-8.1.0 (предварительный просмотр разработчика)

SQLite 3.18.2:

  • 26-8.0.0-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 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-желе Bean
  • 17-4.2-желе Bean
  • 16 -4.1-Jelly Bean

SQLite 3.7.4:

  • 15-4.0.3-Сэндвич с мороженым
  • 14 -4.0-мороженое сэндвич
  • 13-3.2-Honeycomb
  • 12-3.1-Honeycomb
  • 11 -3.0-Honeycomb

SQLite 3.6.22:

  • 10-2.3.3-пряник
  • 9-2.3.1-пряник
  • 8 -2.2-Froyo

SQLite 3.5.9:

  • 7-2.1-Эклер
  • 4-1.6-пончик
  • 3 -1.5-Cupcake

Примечание. Ссылки на уровне 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-желе Bean)
  • LG G2 D802 LG-D802 | JDQ39B (17-4.2-желе 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-Gingerbread, RK39F)
  • LG Optimus LTE TAG F120K/F120L (10-2.3.3-Gingerbread, GRK39F)
  • LG Optimus LTE L-01D (10-2.3.3-Gingerbread, GRJ90)
  • LG Optimus Net P690b (10-2.3.3-Gingerbread, GINGERBREAD)
  • 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-Eclair, ERD79)
  • Garmin-Asus nüvifone A10/A50/Garminfone (7-2.1-Eclair, ERE27)

Примечание: команда 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.

  • 0
    / system / bin / sh: sqlite3: не найдено Это на рутованном устройстве Android 4.0.2
  • 0
    Спасибо знак Я немного смущен. Во время разработки, как я могу убедиться, что моя версия sqlite остается согласованной на всех устройствах? Я имею в виду, что targetSdkVersion или buildTarget как-то влияют на это?
Показать ещё 1 комментарий
53

Несмотря на то, что документация дает 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.

  • 2
    Я предполагаю, что 3.4.0 дан как минимальная версия # - для переносимости вы, вероятно, не должны предполагать, что это более высокая версия, если у вас нет действительно веской причины для этого.
  • 2
    конечно, ты прав. Но если вам нужно использовать некоторые расширенные функции, которые могут повысить производительность на более высоких версиях SQLite, вы можете использовать код для запроса и в конечном итоге переключать тип запроса в зависимости от развернутой версии :)
Показать ещё 4 комментария
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

То же самое для эмулятора ADP1 1.6 и 2.1.

  • 0
    Это дает мне: sqlite3: разрешение отказано
  • 0
    Работал нормально для меня. Я открыл командную строку и переместился в папку Android, где находился adb.exe. Затем я набрал две команды
Показать ещё 1 комментарий
2

Краткий обзор API Andorid и поддерживаемых версий SQLite.

Изображение 1121

Обзор из ссылки в ответе Марка Картера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню