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

271

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

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

Eno
источник
1
Вы все еще можете скопировать-удалить-воссоздать-заново вставить; ALTER TABLE в SQLite не очень полнофункциональный.
Дж. Полфер
Пожалуйста, выберите правильный ответ, 3.4.0 не правильно
Ноя
1
Разве это не зависит от версии Android, которую вы используете? У меня действительно может быть SQLite 3.4.x на моем старом myTouch под управлением 1.6 ИЛИ у меня может быть более высокая версия на моем новом G2 под управлением 2.2. Правильный ответ - проверить вашу конкретную телефонную трубку.
Ино
1.0.0 android.arch.persistence: db и android.arch.persistence: db-framework поставляется несколько недель назад.
Prags

Ответы:

478

ОБНОВЛЕНИЕ ОКТЯБРЯ 2016 : Вот ссылка на обновленные официальные документы, которые включают в себя основные моменты в этом ответе: javadoc уровня пакета android.database.sqlite

Использование эмуляторов:

adb shell sqlite3 --version   

ОБНОВЛЕНИЕ: начиная с SDK 29 (ревизия эмулятора 8), команда оболочки adb дает:

/system/bin/sh: sqlite3: inaccessible or not found

Есть идеи почему? Выпуск трекера здесь .

SQLite 3.28.0 ( оконные функции !):

  • 30-11.0-R (Версия 2 в SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-Q (редакция 8 в SDK Manager)
  • 28 -9,0-П

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-Jelly Bean (неработающая ссылка, см. Здесь )

SQLite 3.7.4 :

  • 15-4.0.3-сэндвич с мороженым
  • 14 -4.0-Ice Cream Sandwich (неработающая ссылка, см. Здесь )
  • 13-3.2-Honeycomb
  • 12-3.1-Honeycomb
  • 11 -3,0-Сота (неработающая ссылка, см. Здесь )

SQLite 3.6.22 :

  • 10-2.3.3-Gingerbread
  • 9-2.3.1-Gingerbread
  • 8 -2.2-Froyo (неработающая ссылка, см. Здесь )

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: https://stackoverflow.com/a/3645800/444761

Для других устройств, смотрите ответ Юри .

Я добавил проблему № 58909 в систему отслеживания проблем Android. Пожалуйста, пометьте это, если хотите поддержать.

Примечание. Если вы хотите, чтобы ваше приложение использовало одну и ту же версию SQLite во всех версиях Android, рассмотрите возможность использования сторонней библиотеки поддержки SQLite .

отметка
источник
/ system / bin / sh: sqlite3: не найдено Это на рутованном устройстве Android 4.0.2
Указатель Null
Спасибо знак Я немного смущен. Во время разработки, как я могу убедиться, что моя версия sqlite остается согласованной на всех устройствах? Я имею в виду, имеет targetSdkVersionили buildTargetимеет какое-либо влияние на это?
Мухаммед Бабар
1
@MuhammadBabar Вам нужно использовать ответ Джури, чтобы получить актуальную версию SQLite, установленную на устройстве пользователя. targetSdkVerson и buildTarget не имеют значения.
Марк
59

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

Juri
источник
2
Я предполагаю, что 3.4.0 дан как минимальная версия # - для переносимости вы, вероятно, не должны предполагать, что это более высокая версия, если у вас нет действительно веской причины для этого.
Ино
2
конечно, ты прав. Но если вам нужно использовать некоторые расширенные функции, которые могут повысить производительность в более высоких версиях SQLite, вы можете использовать код для запроса и в конечном итоге переключать тип запроса в зависимости от развернутой версии :)
Juri
Мой Droid с пользовательским ПЗУ 2.2 также сообщает 3.6.22
Austyn Mahoney
В моем Epic с предварительным выпуском 2.2 написано 3.6.23 - цифры, кажется, поднимаются вверх.
dhaag23
1
Nexus 7 с Android 4.2, дает 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

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

Янченко
источник
Это дает мне: sqlite3: разрешение отказано
Яр
Работал нормально для меня. Я открыл командную строку и перешел в папку Android, где находился adb.exe. Затем я набрал две команды
Pavenhimself
8
выдает "/ system / bin / sh: sqlite3: not found" на Nexus 4 KitKat.
Бен Клейтон,
6

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

введите описание изображения здесь

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

Petterson
источник
0

В комнате вы можете запросить

ВЫБЕРИТЕ sqlite_version ()

RG

Роар Гронмо
источник