Версія SQLite, яка використовується в Android?


271

Яка версія SQLite використовується в Android?

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


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 постачався кілька тижнів тому.
Праги

Відповіді:


478

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

Використання емуляторів:

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)

SQLite 3.22.0 :

  • 29 -10,0-Q (Версія 8 у менеджері SDK)
  • 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 (примітка: використовуються бета-версії 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-бобові желе
  • 17-4.2-квасоля
  • 16 -4,1-Jelly Bean (ламане посилання, дивіться тут )

SQLite 3.7.4 :

  • 15-4.0.3-Сендвіч-морозиво
  • 14 -4,0-Сендвіч-морозиво (розірване посилання, дивіться тут )
  • 13-3,2-соти
  • 12-3,1-соти
  • 11 -3,0-соти (розірване посилання, дивіться тут )

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-кекс (розірване посилання, дивіться тут )

Примітка. Посилання на рівні SDK для Android показують, де змінився пакет 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-Jelly Bean)
  • 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-Пряник, 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-Пряники, GWK74)
  • LG Prada P940 (10-2.3.3-Пряники, GWK74)
  • LG LU6200 / SU640 (10-2.3.3-Пряники, 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-Пряники, 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/a/3645800/444761

Інші пристрої дивіться у відповідь Юрі .

Я додав випуск № 58909 до Android Tracker Issue. Будь ласка, позначте це зіркою, якщо ви хочете його підтримати.

Примітка. Якщо ви хочете, щоб ваш додаток використовував однакову версію SQLite у всіх версіях Android, подумайте про використання цієї сторонньої бібліотеки підтримки SQLite .


/ system / bin / sh: sqlite3: не знайдено Це на вкоріненому пристрої Android 4.0.2
Pointer 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 .


2
Я думаю, що 3.4.0 надається як мінімальна версія # - для портативності ви, мабуть, не повинні вважати його вищою версією, якщо у вас немає поважної причини для цього.
Ено

2
звичайно, ти маєш рацію. Але якщо вам доведеться скористатися деякими розширеними функціями, які можуть підвищити продуктивність у версії більш високої версії SQLite, ви можете використовувати код для запиту і врешті-решт переключити тип запиту залежно від розгорнутої версії :)
Juri,

Мій Droid із користувацьким 2.2 ROM також повідомляє 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: доступ заборонений
Яра

Для мене добре працювали. Я відкрив підказку cmd і перейшов до папки Android, де знаходився adb.exe. Потім я набрав дві команди
Pavenhimself

8
дає "/ system / bin / sh: sqlite3: не знайдено" на Nexus 4 KitKat.
Бен Клейтон

6

Короткий огляд API Andorid та підтримуваних версій SQLite.

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

Огляд знаходиться за посиланням у відповіді Марка Картерса.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.