Versione di SQLite utilizzata in Android?


271

Qual è la versione di SQLite utilizzata in Android?

Motivo: mi chiedo come gestire le migrazioni dello schema. Le versioni più recenti di SQLite supportano un comando SQL "ALTER TABLE" che mi eviterebbe di dover copiare i dati, eliminare la tabella, ricreare la tabella e reinserire i dati.


1
Potresti comunque voler copiare-rilasciare-ricreare-reinserire; ALTER TABLE di SQLite non è molto completo.
J. Polfer,

Scegli la risposta corretta, 3.4.0 non è giusto
Noah

1
Tuttavia, ciò non dipende dalla versione di Android in esecuzione? Potrei davvero avere SQLite 3.4.x sul mio vecchio myTouch in esecuzione 1.6 OPPURE potrei avere una versione superiore sul mio nuovo G2 in esecuzione 2.2. La vera risposta è verificare il proprio ricevitore.
Eno,

1.0.0 di android.arch.persistence: db e android.arch.persistence: db-framework spedito poche settimane fa.
Prags

Risposte:


478

AGGIORNAMENTO OTT 2016 : Ecco un link ai documenti ufficiali aggiornati che include i punti principali in questa risposta: android.database.sqlite a livello di pacchetto javadoc

Utilizzando gli emulatori:

adb shell sqlite3 --version   

AGGIORNAMENTO: dall'SDK 29 (revisione 8 dell'emulatore), il comando shell adb fornisce:

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

Qualche idea sul perché? Tracker dei problemi qui .

SQLite 3.28.0 ( funzioni della finestra !):

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

SQLite 3.22.0 :

  • 29 -10.0-Q (Revisione 8 in SDK Manager)
  • 28 -9,0-P

SQLite 3.19.4 (per qualche motivo 3.19.4 non esiste nelle note di rilascio di sqlite! Quindi, invece, collegando ai check-in di controllo versione):

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (nota: versioni beta O utilizzate 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7.0-N (nota: le anteprime hanno utilizzato la stessa versione)

SQLite 3.8.10.2 :

  • 23-6.0-M (nota: M Anteprima 1 (livello SDK 22) utilizzata 3.8.10 )

SQLite 3.8.6.1 (il collegamento SQLite è per 3.8.6 perché 3.8.6.1 non esiste per qualche motivo):

  • 22-5.1.1-Lollipop

SQLite 3.8.6 :

  • 21-5,0-Lollipop

SQLite (sconosciuto):

  • 20-4.4W.2-Android Wear (nessun emulatore disponibile, ma probabilmente 3.7.11 o 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 (link non funzionante, vedi qui )

SQLite 3.7.4 :

  • 15-4.0.3-Sandwich di gelato
  • 14 -4.0-Ice Cream Sandwich (link non funzionante, vedere qui )
  • 13-3,2-Honeycomb
  • 12-3,1-Honeycomb
  • 11 -3.0-Honeycomb (link non funzionante, vedere qui )

SQLite 3.6.22 :

  • 10-2.3.3-pan di zenzero
  • 9-2.3.1-pan di zenzero
  • 8 -2.2-Froyo (link non funzionante, vedere qui )

SQLite 3.5.9 :

  • 7-2,1-Eclair
  • 4-1,6-Donut
  • 3 -1.5-Cupcake (link non funzionante, vedere qui )

Nota: i collegamenti a livello di SDK Android mostrano dove è stato modificato il pacchetto android.database.sqlite . Se non è presente alcun collegamento (ad es. Livello SDK 17), non viene indicato alcun cambiamento a quel pacchetto.

Nota: ecco alcune anomalie (elenco non esaustivo):

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

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

SQLite 3.7.5 (anziché 3.7.4):

  • Samsung Galaxy Note (15-GT-N7000 | IML74K.ZSLPF)
  • Samsung Galaxy SII (15-SC-02C | IML74K.OMMP4 e 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 (anziché 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 (anziché 3.5.9):

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

Nota: il comando adb per ottenere la versione di SQLite funziona solo sugli emulatori e sui dispositivi con sqlite3 disponibile: https://stackoverflow.com/a/3645800/444761

Per altri dispositivi, vedi la risposta di Juri .

Ho aggiunto un numero # 58909 ad Android Issue Tracker. Per favore, questo se vuoi supportarlo.

Nota: se vuoi che la tua app usi la stessa versione di SQLite su tutte le versioni di Android, prendi in considerazione l'utilizzo di questa libreria di supporto SQLite di terze parti .


/ system / bin / sh: sqlite3: non trovato Questo è su dispositivo Android 4.0.2 con root
Puntatore Null

Grazie mark. Sono un po 'confuso. Durante lo sviluppo, come posso assicurarmi che la mia versione sqlite rimanga coerente su tutti i dispositivi? intendo dire targetSdkVersiono buildTargetha qualche influenza su questo?
Muhammad Babar,

1
@MuhammadBabar È necessario utilizzare la risposta di Juri per ottenere la versione effettiva di SQLite installata sul dispositivo dell'utente. targetSdkVerson e buildTarget non fanno differenza.
Segna il

59

Sebbene la documentazione fornisca 3.4.0 come numero di riferimento, se si esegue il seguente sql, si noterà che esiste un numero molto più elevato di SQlite installato:

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

Questo è solo un pezzo di codice rapido e sporco per recuperare la versione sqlite. Ad esempio su un HTC Hero con Android 2.1, ottengo: 3.5.9 .

Sul mio Nexus One con Android 2.2, ottengo anche 3.6.22 .


2
Immagino che la 3.4.0 sia data come una versione minima # - per portabilità probabilmente non dovresti supporre che sia una versione superiore a meno che tu non abbia davvero un buon motivo per farlo.
Eno,

2
certo, hai ragione. Ma se devi utilizzare alcune funzionalità avanzate che possono migliorare le prestazioni su versioni SQLite superiori, puoi utilizzare il codice per eseguire query e infine cambiare il tipo di query in base alla versione distribuita :)
Juri

My Droid con una ROM 2.2 personalizzata riporta anche 3.6.22
Austyn Mahoney il

My Epic con pre-release 2.2 dice 3.6.23 - i numeri sembrano spostarsi verso l'alto.
dhaag23,

1
Nexus 7 con Android 4.2, fornisce 3.7.11
christophercotton il

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

Lo stesso sull'emulatore ADP1 1.6 e 2.1.


Mi dà: sqlite3: permesso negato
Yar

Ha funzionato bene per me. Ho aperto il cmd prompt e sono passato alla cartella Android, dove si trovava adb.exe. Quindi ho digitato i due comandi
Pavenhimself il

8
fornisce "/ system / bin / sh: sqlite3: non trovato" sul Nexus 4 KitKat.
Ben Clayton,

6

Una breve panoramica delle API di Andorid e delle versioni di SQLite supportate.

inserisci qui la descrizione dell'immagine

La panoramica è dal link nella risposta di Mark Carters.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.