In Android verwendete SQLite-Version?

271

Welche Version von SQLite wird in Android verwendet?

Grund: Ich frage mich, wie ich mit Schemamigrationen umgehen soll. Die neueren SQLite-Versionen unterstützen einen SQL-Befehl "ALTER TABLE", mit dem ich keine Daten kopieren, die Tabelle löschen, eine Tabelle neu erstellen und Daten erneut einfügen muss.

Eno
quelle
1
Möglicherweise möchten Sie weiterhin kopieren, löschen, neu erstellen und wieder einfügen. Die ALTER TABLE von SQLite ist nicht sehr voll funktionsfähig.
J. Polfer
Bitte wählen Sie die richtige Antwort, 3.4.0 ist nicht richtig
Noah
1
Hängt das nicht von der Version von Android ab, die Sie verwenden? Möglicherweise habe ich tatsächlich SQLite 3.4.x auf meinem alten myTouch mit 1.6 oder eine höhere Version auf meinem neuen G2 mit 2.2. Die wahre Antwort ist, nach Ihrem speziellen Mobilteil zu suchen.
Eno
1.0.0 von android.arch.persistence: db und android.arch.persistence: db-framework wurde vor einigen Wochen ausgeliefert.
Prags

Antworten:

478

UPDATE OKT 2016 : Hier ist ein Link zu den aktualisierten offiziellen Dokumenten, der die wichtigsten Punkte in dieser Antwort enthält: android.database.sqlite javadoc auf Paketebene

Verwenden der Emulatoren:

adb shell sqlite3 --version   

UPDATE: Seit SDK 29 (Emulator Revision 8) gibt der Befehl adb shell Folgendes aus:

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

Irgendwelche Ideen warum? Geben Sie hier den Tracker aus .

SQLite 3.28.0 ( Fensterfunktionen !):

  • 30-11.0-R (Revision 2 in SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-Q (Revision 8 in SDK Manager)
  • 28 -9.0-P

SQLite 3.19.4 (aus irgendeinem Grund ist 3.19.4 in SQLite- Versionshinweisen nicht vorhanden! Verknüpfen Sie stattdessen mit Check-ins für die Versionskontrolle):

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (Hinweis: O Beta-Versionen verwendet 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7.0-N (Hinweis: Voransichten verwendeten dieselbe Version)

SQLite 3.8.10.2 :

  • 23-6.0-M (Hinweis: M Vorschau 1 (SDK Level 22) verwendet 3.8.10 )

SQLite 3.8.6.1 (SQLite-Link ist für 3.8.6, da 3.8.6.1 aus irgendeinem Grund nicht vorhanden ist):

  • 22-5.1.1-Lollipop

SQLite 3.8.6 :

  • 21-5.0-Lutscher

SQLite (unbekannt):

  • 20-4.4W.2-Android Wear (kein Emulator verfügbar, aber wahrscheinlich entweder 3.7.11 oder 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 (defekter Link, siehe hier )

SQLite 3.7.4 :

  • 15-4.0.3-Eiscremesandwich
  • 14 -4.0-Ice Cream Sandwich (defekter Link, siehe hier )
  • 13-3.2-Wabe
  • 12-3.1-Wabe
  • 11 -3.0-Honeycomb (defekter Link, siehe hier )

SQLite 3.6.22 :

  • 10-2.3.3-Lebkuchen
  • 9-2.3.1-Lebkuchen
  • 8 -2.2-Froyo (defekter Link, siehe hier )

SQLite 3.5.9 :

  • 7-2.1-Eclair
  • 4-1.6-Donut
  • 3 -1.5-Cupcake (defekter Link, siehe hier )

Hinweis: Links auf Android SDK-Ebene zeigen an, wo sich das Paket android.database.sqlite geändert hat. Wenn kein Link vorhanden ist (z. B. SDK Level 17), werden keine Änderungen an diesem Paket angezeigt.

Hinweis: Hier sind einige Anomalien (Liste keineswegs erschöpfend):

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

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

SQLite 3.7.5 (anstelle von 3.7.4):

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

  • LG Esteem MS910 (10-2.3.3-Lebkuchen, 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 (anstelle von 3.5.9):

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

Hinweis: Der Befehl adb zum Abrufen der SQLite-Version funktioniert nur auf Emulatoren und auf Geräten mit verfügbarem SQLite3: https://stackoverflow.com/a/3645800/444761

Weitere Geräte finden Sie in der Antwort von Juri .

Ich habe dem Android Issue Tracker ein Problem # 58909 hinzugefügt . Bitte markieren Sie dies, wenn Sie es unterstützen möchten.

Hinweis: Wenn Ihre App in allen Android-Versionen dieselbe SQLite-Version verwenden soll, sollten Sie diese SQLite-Unterstützungsbibliothek eines Drittanbieters verwenden .

Mark
quelle
/ system / bin / sh: sqlite3: nicht gefunden Dies ist auf gerooteten Android 4.0.2-Gerät
Zeiger Null
Danke Mark. Ich bin ein bisschen verwirrt. Wie kann ich während der Entwicklung sicherstellen, dass meine SQLite-Version auf allen Geräten konsistent bleibt? Ich meine, hat targetSdkVersionoder buildTargethat das einen Einfluss darauf?
Muhammad Babar
1
@MuhammadBabar Sie müssen Juris Antwort verwenden, um die aktuelle Version von SQLite auf dem Gerät des Benutzers zu installieren. targetSdkVerson und buildTarget machen keinen Unterschied.
Mark
59

Obwohl in der Dokumentation 3.4.0 als Referenznummer angegeben ist, werden Sie beim Ausführen der folgenden SQL feststellen, dass eine viel höhere Anzahl von SQlite installiert ist:

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

Dies ist nur ein Stück schneller, schmutziger Code zum Abrufen der SQLite-Version. Zum Beispiel auf einem HTC Hero mit Android 2.1 bekomme ich: 3.5.9 .

Auf meinem Nexus One mit Android 2.2 bekomme ich sogar 3.6.22 .

Juri
quelle
2
Ich stelle mir vor, dass 3.4.0 als Mindestversion # angegeben ist. Aus Gründen der Portabilität sollten Sie wahrscheinlich nicht davon ausgehen, dass es sich um eine höhere Version handelt, es sei denn, Sie haben einen wirklich guten Grund dafür.
Eno
2
Sicher, du hast recht. Wenn Sie jedoch einige erweiterte Funktionen verwenden müssen, die die Leistung bei höheren SQLite-Versionen verbessern können, können Sie den Code verwenden, um die Art der Abfrage abhängig von der bereitgestellten Version abzufragen und eventuell zu wechseln :)
Juri
Mein Droide mit einem benutzerdefinierten 2.2 ROM meldet auch 3.6.22
Austyn Mahoney
Mein Epos mit Pre-Release 2.2 sagt 3.6.23 - die Zahlen scheinen sich nach oben zu bewegen.
Dhaag23
1
Nexus 7 mit Android 4.2, gibt 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

Gleiches gilt für den ADP1 1.6 & 2.1 Emulator.

yanchenko
quelle
Es gibt mir: sqlite3: Erlaubnis verweigert
Yar
Hat gut für mich funktioniert. Ich öffnete die cmd-Eingabeaufforderung und navigierte zum Android-Ordner, in dem sich adb.exe befand. Dann tippte ich die beiden Befehle ein
Pavenhimself
8
gibt "/ system / bin / sh: sqlite3: nicht gefunden" auf dem Nexus 4 KitKat.
Ben Clayton
6

Ein kurzer Überblick über die Andorid-APIs und die unterstützten SQLite-Versionen.

Geben Sie hier die Bildbeschreibung ein

Die Übersicht stammt aus dem Link in der Antwort von Mark Carters.

Petterson
quelle
0

In Room können Sie abfragen

SELECT sqlite_version ()

RG

Brüllen Sie Grønmo
quelle