Version de SQLite utilisée dans Android?

271

Quelle est la version de SQLite utilisée dans Android?

Raison: je me demande comment gérer les migrations de schéma. Les versions plus récentes de SQLite prennent en charge une commande SQL "ALTER TABLE" qui m'éviterait de devoir copier des données, supprimer la table, recréer la table et réinsérer des données.

Eno
la source
1
Vous pouvez toujours vouloir copier-déposer-recréer-réinsérer; ALTER TABLE de SQLite n'est pas très complet.
J.Polfer
Veuillez choisir la bonne réponse, 3.4.0 n'est pas correct
Noah
1
Cela ne dépend-il pas de la version d'Android que vous utilisez? Je pourrais en effet avoir SQLite 3.4.x sur mon ancien myTouch exécutant 1.6 OU je pourrais avoir une version supérieure sur mon nouveau G2 exécutant 2.2. La vraie réponse est de vérifier votre combiné particulier.
Eno
1.0.0 de android.arch.persistence: db et android.arch.persistence: db-framework livré il y a quelques semaines.
Prags

Réponses:

478

MISE À JOUR OCT 2016 : Voici un lien vers la documentation officielle mise à jour qui inclut les principaux points de cette réponse: android.database.sqlite au niveau du package javadoc

Utilisation des émulateurs:

adb shell sqlite3 --version   

MISE À JOUR: Depuis SDK 29 (émulateur révision 8), la commande adb shell donne:

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

Des idées pourquoi? Suivi des problèmes ici .

SQLite 3.28.0 ( fonctions de fenêtre !):

  • 30-11.0-R (révision 2 dans SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-Q (révision 8 dans SDK Manager)
  • 28 -9,0-P

SQLite 3.19.4 (pour une raison quelconque, 3.19.4 n'existe pas dans les notes de publication de sqlite!

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (remarque: versions bêta O utilisées 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7.0-N (remarque: les aperçus utilisaient la même version)

SQLite 3.8.10.2 :

  • 23-6.0-M (remarque: M Preview 1 (SDK niveau 22) utilisé 3.8.10 )

SQLite 3.8.6.1 (le lien SQLite est pour 3.8.6 car 3.8.6.1 n'existe pas pour une raison quelconque):

  • 22-5.1.1-Sucette

SQLite 3.8.6 :

  • 21-5.0-Lollipop

SQLite (inconnu):

  • 20-4.4W.2-Android Wear (aucun émulateur disponible, mais probablement 3.7.11 ou 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 (lien brisé, voir ici )

SQLite 3.7.4 :

  • 15-4.0.3-Sandwich à la crème glacée
  • 14 -4.0-Sandwich à la crème glacée (lien brisé, voir ici )
  • 13-3.2-Honeycomb
  • 12-3.1-Honeycomb
  • 11 -3.0-Honeycomb (lien brisé, voir ici )

SQLite 3.6.22 :

  • 10-2.3.3-Pain d'épices
  • 9-2.3.1-Pain d'épices
  • 8 -2.2-Froyo (lien brisé, voir ici )

SQLite 3.5.9 :

  • 7-2.1-Eclair
  • 4-1.6-Donut
  • 3 -1,5-Cupcake (lien brisé, voir ici )

Remarque: les liens de niveau SDK Android indiquent où le package android.database.sqlite a changé. Lorsqu'il n'y a pas de lien (par exemple SDK niveau 17), n'indique aucune modification de ce package.

Remarque: Voici quelques anomalies (liste nullement exhaustive):

SQLite 3.7.13 (au lieu de 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 (au lieu de 3.6.22):

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

SQLite 3.7.5 (au lieu de 3.7.4):

  • Samsung Galaxy Note (15-GT-N7000 | IML74K.ZSLPF)
  • Samsung Galaxy SII (15-SC-02C | IML74K.OMMP4 et 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 (au lieu de 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 (au lieu de 3.5.9):

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

Remarque: la commande adb pour obtenir la version SQLite ne fonctionne que sur les émulateurs et sur les appareils avec sqlite3 disponible: https://stackoverflow.com/a/3645800/444761

Pour les autres appareils, voir la réponse de Juri .

J'ai ajouté un problème n ° 58909 à Android Issue Tracker. Veuillez indiquer ceci si vous souhaitez l'appuyer.

Remarque: si vous souhaitez que votre application utilise la même version de SQLite sur toutes les versions d'Android, envisagez d'utiliser cette bibliothèque de support SQLite tierce .

Mark
la source
/ system / bin / sh: sqlite3: not found Ceci est sur un appareil Android 4.0.2 enraciné
Pointer Null
Merci marque. Je suis un peu confus. Pendant le développement, comment puis-je m'assurer que ma version sqlite reste cohérente sur tous les appareils? je veux dire a targetSdkVersionou buildTargeta une influence sur cela?
Muhammad Babar
1
@MuhammadBabar Vous devez utiliser la réponse de Juri pour obtenir la version réelle de SQLite installée sur l'appareil de l'utilisateur. targetSdkVerson et buildTarget ne font aucune différence.
Mark
59

Bien que la documentation donne 3.4.0 comme numéro de référence, si vous exécutez le SQL suivant, vous remarquerez qu'il y a un nombre beaucoup plus élevé de SQlite installé:

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

Ceci est juste un morceau de code rapide et sale pour récupérer la version sqlite. Par exemple sur un HTC Hero avec Android 2.1, j'obtiens: 3.5.9 .

Sur mon Nexus One avec Android 2.2, j'obtiens même 3.6.22 .

Juri
la source
2
J'imagine que la version 3.4.0 est donnée comme une version minimale # - pour la portabilité, vous ne devriez probablement pas supposer que c'est une version supérieure à moins d'avoir une très bonne raison de le faire.
Eno
2
vous avez raison. Mais si vous devez utiliser des fonctionnalités avancées qui peuvent améliorer les performances sur les versions supérieures de SQLite, vous pouvez utiliser le code pour interroger et éventuellement changer le type de requête en fonction de la version déployée :)
Juri
Mon Droid avec une ROM 2.2 personnalisée signale également 3.6.22
Austyn Mahoney
Mon Epic avec la pré-version 2.2 dit 3.6.23 - les chiffres semblent augmenter progressivement.
dhaag23
1
Nexus 7 avec Android 4.2, donne 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

Idem sur l'émulateur ADP1 1.6 & 2.1.

yanchenko
la source
Cela me donne: sqlite3: autorisation refusée
Yar
Ça a bien marché pour moi. J'ai ouvert l'invite cmd et j'ai navigué vers le dossier android, où se trouvait adb.exe. Ensuite, j'ai tapé les deux commandes
Pavenhimself
8
donne "/ system / bin / sh: sqlite3: not found" sur le Nexus 4 KitKat.
Ben Clayton le
6

Un bref aperçu des API Andorid et des versions SQLite prises en charge.

entrez la description de l'image ici

L'aperçu est du lien dans la réponse de Mark Carters.

Petterson
la source
0

Dans la salle, vous pouvez interroger

SELECT sqlite_version ()

RG

Roar Grønmo
la source