2010-03-10 6 views
232

Jaka jest wersja SQLite używana w systemie Android?Wersja SQLite 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 zaoszczędziłoby mi konieczność kopiowania danych, upuszczenia tabeli, odtworzenia tabeli i ponownego wstawienia danych.

+1

Nadal możesz chcieć skopiować-upuścić-odtworzyć-ponownie; ALTER TABLE SQLite nie jest w pełni funkcjonalny. –

+0

Proszę wybrać poprawną odpowiedź, 3.4.0 nie jest poprawne – Noah

+0

Czy to nie zależy od wersji Androida, na którym działasz? Mogę rzeczywiście mieć SQLite 3.4.x na moim starym myTouch w wersji 1.6 LUB mogę mieć wyższą wersję na moim nowym G2 z systemem 2.2. Prawdziwą odpowiedzią jest sprawdzenie konkretnego telefonu. – Eno

Odpowiedz

26
$ adb shell 
$ sqlite3 --version 
sqlite3 --version 
3.5.9 

samo na ADP1 1,6 & 2,1 emulator.

+0

Daje mi: sqlite3: odmowa zgody – Yar

+0

Sprawdziło się dobrze dla mnie. Otworzyłem polecenie cmd i przejrzałem do folderu android, gdzie znajdował się plik adb.exe. Następnie wpisałem dwie komendy: – Pavenhimself

+5

"System/bin/sh: sqlite3: not found" na Nexusie 4 KitKat. –

55

Chociaż dokumentacja daje 3.4.0 jako numer referencyjny, jeśli wykonać następujące sql, zauważysz, że jest znacznie wyższa liczba SQLite zainstalowana:

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 kawałek szybki, brudny kod do pobrania wersji sqlite. Na przykład w HTC Hero z systemem Android 2.1 otrzymuję: 3.5.9.

Na moim Nexusie One z systemem Android 2.2 dostaję nawet 3.6.22.

+2

Wyobrażam sobie, że 3.4.0 jest podana jako minimalna wersja # - dla przenośności prawdopodobnie nie powinieneś zakładać jego wyższej wersji, chyba że masz naprawdę dobry powód, aby to zrobić. – Eno

+2

masz rację. Ale jeśli musisz użyć zaawansowanych funkcji, które mogą poprawić wydajność w wyższych wersjach SQLite, możesz użyć tego kodu do zapytania i ostatecznie zmienić rodzaj zapytania w zależności od wdrożonej wersji :) – Juri

+0

My Droid z niestandardową 2.2 ROM również zgłasza 3.6 .22 –

446

UPDATE października 2016: Tu jest link do zaktualizowanych oficjalnych docs który zawiera główne punkty tej odpowiedzi: android.database.sqlite package-level javadoc

Używanie emulatorów (ADB shell sqlite3 version):

UPDATE : Niestety, starszy (SDK 18 i wcześniej) diffs pakiet poziomu API przestały działać: https://issuetracker.google.com/issues/37048579

SQLite 3.19.4 (z jakiegoś powodu 3.19.4 nie istnieje w sqlite release notes więc linkami do kontroli wersji check-in zamiast!) :

  • 27-8.1.0

SQLite 3.18.2:

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

SQLite 3.9.2:

  • 25-7.1.1 N MR1
  • 24 -7,0-N (uwaga: podgląd stosować ten sam wersji)

SQLite 3.8.10.2:

  • 23-6.0-M (uwaga M podgląd 1 (poziom SDK 22) używane 3.8.10)

SQLite 3.8.6.1 (Link SQLite ponieważ 3.8.6.1 do 3.8.6, nie istnieje FO z jakiegoś powodu):

  • 22-5.1.1 lizak

SQLite 3.8.6:

  • 21-5.0-lizak

SQLite (brak danych)

  • 20-4.4W.2-Android Wear (brak dostępnych emulatorów, ale prawdopodobnie wersji 3.7.11 lub 3.8.4.3)

SQLite 3.7.11:

  • 19-4.4-KitKat
  • 18-4.3-Jelly Bean
  • 17-4.2-Jelly Bean
  • 16 -4,1-Jelly Bean

SQLite 3.7.4:

  • 15-4.0.3-lody Sandwich
  • 14 -4,0-lody Sandwich
  • 13-3.2 strukturze plastra miodu
  • 12-3.1 strukturze plastra miodu
  • 11 -3,0-plastra miodu

SQLite 3.6.22:

  • 10-2.3.3-Gingerbread
  • 9-2.3.1-pierniki
  • 8 -2,2-Froyo

SQLite 3.5.9:

  • 7-2.1-Eclair
  • 4-1.6-pierścieniowy
  • 3 - 1.5-Cupcake

Uwaga: Łącza na poziomie Androida SDK pokazują, gdzie zmienił się pakiet android.database.sqlite. W przypadku braku łącza (np. Poziom 17 SDK) oznacza brak zmian w tym pakiecie.

Uwaga: Oto niektóre anomalie (lista nie wyczerpuje):

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 P C800 (10-2.3.3-pierników GRJ22)
  • LG Optimus Vu F100S/F100L (10-2.3.3-pierników RK39F)
  • LG Optimus LTE TAG F120K/F120L (10 -2.3.3-Gingerbread, GRK39F)
  • LG Optimus LTE L-01D (10-2.3.3-pierników GRJ90)
  • LG Optimus netto P690b (10-2.3.3, pierniki, pierników)
  • LG Prada KU5400 (10-2.3.3-pierniki , GWK74)
  • LG Prada P940 (10-2.3.3-pierników GWK74)
  • LG LU6200/SU640 (10-2.3.3-pierników 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-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 (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: adb polecenie ge t Wersja SQLite działa tylko na emulatorach i na urządzeniach z sqlite3: https://stackoverflow.com/a/3645800/444761

W przypadku innych urządzeń, zobacz Juri's answer.

Dodałem Issue #58909 do narzędzia do śledzenia problemów z Androidem. Zaznacz to, jeśli chcesz go wspierać.

Uwaga: jeśli chcesz, aby aplikacja korzystała z tej samej wersji SQLite we wszystkich wersjach systemu Android, rozważ użycie opcji this 3rd party SQLite support library.

+0

/system/bin/sh: sqlite3: nie znaleziono To jest na zrootowanym urządzeniu z systemem Android 4.0.2 –

+0

Dzięki znaku. Jestem nieco zdezorientowany. Podczas rozwoju, jak mogę upewnić się, że moja wersja sqlite pozostaje spójna na wszystkich urządzeniach? mam na myśli, czy 'targetSdkVersion' lub' buildTarget' ma jakikolwiek wpływ na to? –

+0

@MuhammadBabar Musisz użyć odpowiedzi Juri, aby uzyskać aktualną wersję SQLite zainstalowanego na urządzeniu użytkownika. targetSdkVerson i buildTarget nie mają znaczenia. –

2

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

enter image description here

Przegląd jest z linku w Mark Carters odpowiedź.