Wersja SQLite używana w systemie Android?

271

Jaka wersja SQLite jest używana w systemie Android?

Powód: Zastanawiam się, jak obsługiwać migracje schematów. Nowsze wersje SQLite obsługują polecenie SQL „ALTER TABLE”, co pozwoliłoby mi uniknąć kopiowania danych, upuszczania tabeli, odtwarzania tabeli i ponownego wstawiania danych.

Eno
źródło
1
Nadal możesz chcieć skopiować, upuścić, odtworzyć, włożyć ponownie; SQLite ALTER TABLE nie jest w pełni funkcjonalny.
J. Polfer
Proszę wybrać poprawną odpowiedź, 3.4.0 nie jest poprawne
Noah
1
Czy to jednak nie zależy od wersji Androida, z której korzystasz? Mogę rzeczywiście mieć SQLite 3.4.x na moim starym myTouch z systemem 1.6 LUB Mogę mieć wyższą wersję na moim nowym G2 z systemem 2.2. Prawdziwą odpowiedzią jest sprawdzenie konkretnego telefonu.
Eno
Wersja 1.0.0 android.arch.persistence: db i android.arch.persistence: db-framework dostarczone kilka tygodni temu.
Prags

Odpowiedzi:

478

AKTUALIZACJA PAŹDZIERNIKA 2016 : Oto link do zaktualizowanych oficjalnych dokumentów, który zawiera główne punkty tej odpowiedzi: android.database.sqlite javadoc na poziomie pakietu

Korzystanie z emulatorów:

adb shell sqlite3 --version   

AKTUALIZACJA: Od SDK 29 (wersja emulatora 8) polecenie powłoki adb daje:

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

Jakieś pomysły, dlaczego? Tutaj możesz śledzić problem .

SQLite 3.28.0 ( funkcje okna !):

  • 30-11.0-R (Wersja 2 w SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-P (wersja 8 w SDK Manager)
  • 28 -9,0-P

SQLite 3.19.4 (z jakiegoś powodu 3.19.4 nie istnieje w uwagach do wydania sqlite! Więc zamiast tego link do kontroli wersji):

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (uwaga: zastosowano wersje O beta 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7,0-N (uwaga: w podglądzie zastosowano tę samą wersję)

SQLite 3.8.10.2 :

  • 23-6,0-M (uwaga: zastosowano M Preview 1 (SDK poziom 22) 3.8.10 )

SQLite 3.8.6.1 (łącze SQLite jest przeznaczone dla 3.8.6, ponieważ 3.8.6.1 z jakiegoś powodu nie istnieje):

  • 22-5.1.1-Lollipop

SQLite 3.8.6 :

  • 21-5.0-Lollipop

SQLite (nieznany):

  • 20-4.4W.2-Android Wear (brak emulatora, ale prawdopodobnie 3.7.11 lub 3.8.4.3)

SQLite 3.7.11 :

  • 19-4.4-KitKat
  • 18-4,3-żelka
  • 17-4.2-żelki
  • 16 -4,1-Jelly Bean (uszkodzony link, patrz tutaj )

SQLite 3.7.4 :

  • 15-4.0.3-Kanapka z lodami
  • 14 -4,0-Ice Cream Sandwich (uszkodzony link, patrz tutaj )
  • 13-3.2-plaster miodu
  • 12-3.1-plaster miodu
  • 11 -3,0-plaster miodu (uszkodzony link, patrz tutaj )

SQLite 3.6.22 :

  • 10-2.3.3-Piernik
  • 9-2.3.1-Piernik
  • 8 -2,2-Froyo (uszkodzony link, patrz tutaj )

SQLite 3.5.9 :

  • 7-2.1-Eclair
  • 4-1.6-Pączek
  • 3 -1.5-Cupcake (uszkodzony link, patrz tutaj )

Uwaga: linki poziomu zestawu SDK systemu Android pokazują, gdzie zmienił się pakiet android.database.sqlite . Jeśli nie ma łącza (np. 17 zestawu SDK), oznacza brak zmian w tym pakiecie.

Uwaga: Oto niektóre anomalie (lista nie jest wyczerpująca):

SQLite 3.7.13 (zamiast 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 (zamiast 3.6.22):

  • LG Optimus Sol E730 / myTouch E739 / myTouch Q C800 (10-2.3.3-Piernik, GRJ22)
  • LG Optimus Vu F100S / F100L (10-2.3.3-Piernik, RK39F)
  • LG Optimus LTE TAG F120K / F120L (10-2.3.3-Piernik, GRK39F)
  • LG Optimus LTE L-01D (10-2.3.3-Piernik, GRJ90)
  • LG Optimus Net P690b (10-2.3.3-Piernik, GINGERBREAD)
  • LG Prada KU5400 (10-2.3.3-Piernik, GWK74)
  • LG Prada P940 (10-2.3.3-Piernik, GWK74)
  • LG LU6200 / SU640 (10-2.3.3-Gingerbread, GRJ90) s

SQLite 3.7.5 (zamiast 3.7.4):

  • Samsung Galaxy Note (15-GT-N7000 | IML74K.ZSLPF)
  • Samsung Galaxy SII (15-SC-02C | IML74K.OMMP4 i 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 (zamiast 3.6.22):

  • LG Esteem MS910 (10-2.3.3-Piernik, 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 (zamiast 3.5.9):

  • Motorola Backflip MB300 (7-2.1-Eclair, ERD79)
  • Garmin-Asus nüvifone A10 / A50 / Garminfone (7-2.1-Eclair, ERE27)

Uwaga: polecenie adb, aby uzyskać wersję SQLite, działa tylko na emulatorach i urządzeniach z dostępnym sqlite3: https://stackoverflow.com/a/3645800/444761

W przypadku innych urządzeń zobacz odpowiedź Jurija .

Dodałem problem nr 58909 do narzędzia do śledzenia problemów z systemem Android. Oznacz to gwiazdką, jeśli chcesz to wesprzeć.

Uwaga: jeśli chcesz, aby Twoja aplikacja korzystała z tej samej wersji SQLite we wszystkich wersjach Androida, rozważ użycie tej biblioteki obsługi SQLite innej firmy .

Mark
źródło
/ system / bin / sh: sqlite3: nie znaleziono To jest na zrootowanym urządzeniu z Androidem 4.0.2
Wskaźnik Null
Dzięki znak. Jestem trochę zmieszany. W trakcie programowania, w jaki sposób mogę się upewnić, że moja wersja sqlite pozostaje spójna na wszystkich urządzeniach? mam na myśli, targetSdkVersionczy buildTargetma na to jakiś wpływ?
Muhammad Babar
1
@MuhammadBabar Musisz użyć odpowiedzi Jurija, aby uzyskać faktyczną wersję SQLite zainstalowaną na urządzeniu użytkownika. targetSdkVerson i buildTarget nie mają znaczenia.
Mark
59

Mimo że dokumentacja podaje numer 3.4.0 jako numer referencyjny, jeśli wykonasz następujący kod SQL, zauważysz, że zainstalowano znacznie większą liczbę SQlite:

Cursor cursor = SQLiteDatabase.openOrCreateDatabase(":memory:", null).rawQuery("select sqlite_version() AS sqlite_version", null);
String sqliteVersion = "";
while(cursor.moveToNext()){
   sqliteVersion += cursor.getString(0);
}

To tylko krótki, brudny kod do pobrania wersji sqlite. Na przykład w telefonie HTC Hero z systemem Android 2.1 otrzymuję: 3.5.9 .

Na moim Nexus One z Androidem 2.2 dostaję nawet 3.6.22 .

Juri
źródło
2
Wydaje mi się, że 3.4.0 podano jako wersję minimalną # - dla przenośności prawdopodobnie nie powinieneś zakładać, że jest to wyższa wersja, chyba że masz naprawdę dobry powód, aby to zrobić.
Eno
2
pewnie masz rację. Ale jeśli musisz skorzystać z zaawansowanych funkcji, które mogą poprawić wydajność w wyższych wersjach SQLite, możesz użyć kodu do zapytania i ostatecznie zmienić rodzaj zapytania w zależności od wdrożonej wersji :)
Juri
Mój Droid z niestandardowym ROMem 2.2 również zgłasza 3.6.22
Austyn Mahoney
Moja Epopeja z wersją przedpremierową 2.2 mówi 3.6.23 - liczby wydają się rosnąć w górę.
dhaag23
1
Nexus 7 z Androidem 4.2, daje 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

To samo na emulatorze ADP1 1.6 i 2.1.

Janchenko
źródło
Daje mi to: sqlite3: odmowa
dostępu
Działa dobrze dla mnie. Otworzyłem wiersz polecenia cmd i przeszedłem do folderu Androida, w którym znajdował się plik adb.exe. Następnie
wpisałem
8
daje „/ system / bin / sh: sqlite3: not found” na Nexus 4 KitKat.
Ben Clayton
6

Krótki przegląd interfejsów API Andorid i obsługiwanych wersji SQLite.

wprowadź opis zdjęcia tutaj

Przegląd pochodzi z linku w odpowiedzi Mark Carters.

Petterson
źródło
0

W pokoju możesz zapytać

WYBIERZ wersję sqlite_version ()

RG

Roar Grønmo
źródło