2010-03-10 11 views
232

Qual è la versione di SQLite utilizzata in Android?Versione di SQLite utilizzata in Android?

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

+1

Si potrebbe ancora voler copiare-drop-recreate-reinsert; ALTER TABLE di SQLite non è molto completo. –

+0

Scegliere la risposta corretta, 3.4.0 non è corretto – Noah

+0

Non dipende dalla versione di Android in esecuzione? Potrei davvero avere SQLite 3.4.x sul mio vecchio myTouch in esecuzione 1.6 O potrei avere una versione più alta sul mio nuovo G2 in esecuzione 2.2. La vera risposta è verificare il tuo particolare portatile. – Eno

risposta

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

Same su ADP1 1.6 & 2.1 emulatore.

+0

Mi dà: sqlite3: permesso negato – Yar

+0

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

+5

fornisce "/ system/bin/sh: sqlite3: not found" sul Nexus 4 KitKat. –

55

Sebbene la documentazione dà 3.4.0 come numero di riferimento, se si esegue il seguente SQL, si noterà che c'è 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 veloce e sporco per recuperare la versione sqlite. Ad esempio su 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 3.4.0 sia dato come versione minima # - per la portabilità probabilmente non dovresti assumere una versione più alta a meno che tu non abbia una buona ragione per farlo. – Eno

+2

certo, hai ragione. Ma se devi usare alcune funzionalità avanzate che possono migliorare le prestazioni su versioni SQLite più alte, puoi usare il codice per interrogare e eventualmente cambiare il tipo di query a seconda della versione distribuita :) – Juri

+0

Anche il mio Droid con una ROM personalizzata 2.2 riporta 3.6 .22 –

446

UPDATE ottobre 2016: Ecco un link per la documentazione ufficiale aggiornata che comprende i principali punti in questa risposta: android.database.sqlite package-level javadoc

Utilizzando gli emulatori (adb shell sqlite3 --version):

UPDATE : Siamo spiacenti, più vecchio (SDK 18 e precedenti) di funzionamento diff a livello di pacchetto API hanno smesso: https://issuetracker.google.com/issues/37048579

SQLite 3.19.4 (per qualche motivo 3.19.4 non esiste nella note di rilascio SQLite in modo che collega al controllo di versione check-in, invece!) :

  • 27-8.1.0

SQLite 3.18.2:

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

SQLite 3.9.2:

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

SQLite 3.8.10.2:

  • 23-6.0-M (nota : M Preview 1 (livello di SDK 22) utilizzato 3.8.10)

SQLite 3.8.6.1 (link SQLite è per 3.8.6 perché 3.8.6.1 non esiste fo 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

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-Gingerbread
  • 0.123.
  • 9-2.3.1-Gingerbread
  • 8 -2,2-Froyo

SQLite 3.5.9:

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

Nota: i collegamenti a livello SDK Android mostrano dove è stato modificato il pacchetto android.database.sqlite. Laddove non vi è alcun collegamento (ad esempio, livello SDK 17), non indica modifiche a quel pacchetto.

Nota: Qui ci sono alcune anomalie (elenco in alcun modo esaustivo):

SQLite 3.7.13 (al posto di 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 (al posto di 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-pan di zenzero, RK39F)
  • LG Optimus LTE TAG F120K/F120L (10 -2.3.3-Gingerbread, GRK39F)
  • LG Optimus LTE L-01D (10-2.3.3-pan di zenzero, GRJ90)
  • LG Optimus Net P690b (10-2.3.3-pan di zenzero, pan di zenzero)
  • LG Prada KU5400 (10-2.3.3-Gingerbread , GWK74)
  • LG Prada P940 (10-2.3.3-pan di zenzero, GWK74)
  • LG LU6200/SU640 (10-2.3.3-pan di zenzero, GRJ90) s

SQLite 3.7.5 (invece di 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 (al posto di 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 ge t La versione SQLite funziona solo su emulatori e su dispositivi con sqlite3 disponibili: https://stackoverflow.com/a/3645800/444761

Per altri dispositivi, vedere Juri's answer.

Ho aggiunto un Issue #58909 al Tracker di problemi Android. Per favore recita questo se vuoi supportarlo.

Nota: se si desidera che l'app utilizzi la stessa versione di SQLite su tutte le versioni di Android, prendere in considerazione l'utilizzo di this 3rd party SQLite support library.

+0

/system/bin/sh: sqlite3: non trovato Si tratta di dispositivo Android 4.0.2 con root –

+0

Grazie mark. Sono un po 'confuso. Durante lo sviluppo, come posso assicurarmi che la mia versione sqlite rimanga coerente su tutti i dispositivi? Voglio dire che 'targetSdkVersion' o' buildTarget' ha qualche influenza su questo? –

+0

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

2

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

enter image description here

La panoramica è dal link in Marco Carters risposta.

Problemi correlati