2010-03-10 11 views
232

Welche Version von SQLite wird in Android verwendet?Version von SQLite in Android verwendet?

Grund: Ich frage mich, wie Schema Migrationen zu behandeln. Die neueren SQLite-Versionen unterstützen einen SQL-Befehl "ALTER TABLE", der es mir erspart, Daten zu kopieren, die Tabelle zu löschen, die Tabelle neu zu erstellen und Daten neu einzufügen.

+1

Sie möchten immer noch kopieren-ablegen-neu erstellen-reinsert; SQLITES ALTER TABLE ist nicht sehr umfangreich. –

+0

Bitte wählen Sie die richtige Antwort, 3.4.0 ist nicht richtig – Noah

+0

Kommt es nicht auf die Version von Android an, die Sie ausführen? Ich könnte tatsächlich SQLite 3.4.x auf meinem alten myTouch mit 1.6 oder ich könnte eine höhere Version auf meinem neuen G2 2.2 laufen haben. Die wahre Antwort ist, nach Ihrem bestimmten Hörer zu überprüfen. – Eno

Antwort

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

Same auf ADP1 1.6 & 2.1-Emulator.

+0

Es gibt mir: sqlite3: Erlaubnis verweigert – Yar

+0

Arbeitete gut für mich. Ich öffnete CMD-Eingabeaufforderung und navigierte zum Android-Ordner, wo adb.exe gefunden wurde. Dann tippte ich die beiden Befehle ein – Pavenhimself

+5

gibt "/ system/bin/sh: sqlite3: nicht gefunden" auf dem Nexus 4 KitKat. –

55

Obwohl die Dokumentation 3.4.0 als Referenznummer gibt, wenn Sie die folgende SQL ausführen, werden Sie feststellen, dass es 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.

+2

Ich stelle mir vor, dass 3.4.0 als minimale Version # angegeben wird - für Portabilität sollte man wahrscheinlich keine höhere Version annehmen, es sei denn, man hat einen wirklich guten Grund dafür. – Eno

+2

sicher, du hast Recht. Aber wenn Sie einige erweiterte Funktionen verwenden müssen, die die Leistung auf 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 schließlich zu wechseln :) – Juri

+0

Mein Droid mit einem benutzerdefinierten 2.2 ROM meldet auch 3.6 .22 –

446

UPDATE Oktober 2016: Hier ist ein Link auf die offizielle Dokumentation aktualisiert, die die wichtigsten Punkte in dieser Antwort beinhaltet: android.database.sqlite package-level javadoc

Mit den Emulatoren (adb shell sqlite3 --version):

UPDATE : Sorry, ältere (SDK 18 und früher) Paket-Level-API diffs Arbeitsaufgehört hat: https://issuetracker.google.com/issues/37048579

SQLite 3.19.4 (aus irgendeinem Grunde 3.19.4 existieren nicht statt in SQLite Release Notes so die Anbindung an Versionskontrolle Check-in!) :

  • 27-8.1.0

SQLite 3.18.2:

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

SQLite 3.9.2:

  • 25-7.1.1-N MR1
  • 24 -7,0-N (Anmerkung: Vorschauen verwendet die gleiche Version)

SQLite 3.8.10.2:

  • 23-6.0-M (Anmerkung : M 1 Vorschau (SDK Ebene 22) verwendet 3.8.10)

SQLite 3.8.6.1 (SQLite Verbindung für 3.8.6 weil 3.8.6.1 ist nicht existiert fo aus irgendeinem Grund):

  • 22-5.1.1-Lollipop

SQLite 3.8.6:

  • 21-5.0-Lollipop

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

SQLite 3.7.4:

  • 15-4.0.3-Ice Cream Sandwich
  • 14 -4,0-Ice Cream Sandwich
  • 13-3,2-Honeycomb
  • 12-3,1-Honeycomb
  • 11 -3,0-Honeycomb

SQLite 3.6.22:

  • 10-2.3.3-Lebkuchen
  • 9-2.3.1-Lebkuchen
  • 8 -2,2-Froyo

SQLite 3.5.9:

  • 7-2.1-Eclair
  • 4-1.6-Donut
  • 3 - 1.5-Cupcake

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

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

SQLite 3.7.13 (statt 3.7.11):

  • LG Optimus L70 MS323 LGMS323 | KOT49I.MS32310b (19- 4.4-KitKat)
  • LG Optimus 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 (statt 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, Lebkuchen)
  • 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 (statt 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 (statt 3.5.9):

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

Hinweis: adb Befehl ge t SQLite-Version funktioniert nur auf Emulatoren und auf Geräten mit sqlite3 verfügbar: https://stackoverflow.com/a/3645800/444761

Für andere Geräte, siehe Juri's answer.

Ich habe den Android Issue Tracker um Issue #58909 erweitert. Bitte markieren Sie dies, wenn Sie es unterstützen möchten.

Hinweis: Wenn Sie möchten, dass Ihre App die gleiche Version von SQLite für alle Android-Versionen verwendet, sollten Sie die Verwendung von this 3rd party SQLite support library in Erwägung ziehen.

+0

/system/bin/sh: sqlite3: nicht gefunden Dies ist auf gerootet Android 4.0.2 Gerät –

+0

Danksagung. Ich bin ein bisschen verwirrt. Während der Entwicklung Wie kann ich sicherstellen, dass meine SQLite-Version auf allen Geräten konsistent bleibt? Ich meine, hat 'targetSdkVersion' oder' buildTarget' irgendeinen Einfluss darauf? –

+0

@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. –

2

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

enter image description here

Die Übersicht ist über den Link in Mark Carters Antwort.