¿Versión de SQLite utilizada en Android?

271

¿Cuál es la versión de SQLite utilizada en Android?

Motivo: me pregunto cómo manejar las migraciones de esquemas. Las versiones más nuevas de SQLite admiten un comando SQL "ALTER TABLE" que me ahorraría tener que copiar datos, descartar la tabla, volver a crear la tabla y volver a insertar los datos.

Eno
fuente
1
Es posible que aún desee copiar-soltar-recrear-reinsertar; La ALTER TABLE de SQLite no tiene muchas funciones.
J. Polfer
Elija la respuesta correcta, 3.4.0 no es correcto
Noah
1
Sin embargo, ¿eso no depende de la versión de Android que esté ejecutando? De hecho, podría tener SQLite 3.4.x en mi viejo myTouch con 1.6 O podría tener una versión más alta en mi nuevo G2 con 2.2. La verdadera respuesta es verificar su teléfono particular.
Eno
1.0.0 de android.arch.persistence: db y android.arch.persistence: db-framework enviado hace unas semanas.
Prags

Respuestas:

478

ACTUALIZACIÓN OCTUBRE 2016 : Aquí hay un enlace a los documentos oficiales actualizados que incluye los puntos principales de esta respuesta: android.database.sqlite package-level javadoc

Usando los emuladores:

adb shell sqlite3 --version   

ACTUALIZACIÓN: desde SDK 29 (revisión de emulador 8), el comando adb shell proporciona:

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

Alguna idea de por qué? Emitir rastreador aquí .

SQLite 3.28.0 ( funciones de ventana !):

  • 30-11.0-R (Revisión 2 en SDK Manager)

SQLite 3.22.0 :

  • 29 -10.0-Q (Revisión 8 en SDK Manager)
  • 28 -9.0-P

SQLite 3.19.4 (¡por alguna razón 3.19.4 no existe en las notas de la versión de sqlite! Por lo tanto, se vincula a los controles de control de versiones):

  • 27 -8.1.0-O MR1

SQLite 3.18.2 :

  • 26-8.0.0-O (nota: las versiones beta O utilizan 3.18.0 )

SQLite 3.9.2 :

  • 25-7.1.1-N MR1
  • 24 -7.0-N (nota: las vistas previas utilizan la misma versión)

SQLite 3.8.10.2 :

  • 23-6.0-M (nota: M Vista previa 1 (SDK nivel 22) utilizado 3.8.10 )

SQLite 3.8.6.1 (el enlace SQLite es para 3.8.6 porque 3.8.6.1 no existe por alguna razón):

  • 22-5.1.1-Lollipop

SQLite 3.8.6 :

  • 21-5.0-Lollipop

SQLite (desconocido):

  • 20-4.4W.2-Android Wear (no hay emulador disponible, pero probablemente ya sea 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 (enlace roto, ver aquí )

SQLite 3.7.4 :

  • 15-4.0.3-Sandwich de helado
  • 14 -4.0-Ice Cream Sandwich (enlace roto, ver aquí )
  • 13-3.2-Panal
  • 12-3.1-Panal
  • 11 -3.0-Honeycomb (enlace roto, ver aquí )

SQLite 3.6.22 :

  • 10-2.3.3-Pan de jengibre
  • 9-2.3.1-Pan de jengibre
  • 8 -2.2-Froyo (enlace roto, ver aquí )

SQLite 3.5.9 :

  • 7-2.1-Eclair
  • 4-1.6-Donut
  • 3 -1.5-Cupcake (enlace roto, ver aquí )

Nota: los enlaces de nivel de Android SDK muestran dónde ha cambiado el paquete android.database.sqlite . Donde no hay enlace (por ejemplo, SDK nivel 17), indica que no hay cambios en ese paquete.

Nota: Aquí hay algunas anomalías (la lista no es exhaustiva):

SQLite 3.7.13 (en lugar 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 (en lugar de 3.6.22):

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

SQLite 3.7.5 (en lugar de 3.7.4):

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

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

Nota: el comando adb para obtener la versión SQLite solo funciona en emuladores y en dispositivos con sqlite3 disponible: https://stackoverflow.com/a/3645800/444761

Para otros dispositivos, vea la respuesta de Juri .

He agregado un número de problema # 58909 al rastreador de problemas de Android. Por favor marque esto si desea apoyarlo.

Nota: si desea que su aplicación use la misma versión de SQLite en todas las versiones de Android, considere usar esta biblioteca de soporte SQLite de terceros .

Mark
fuente
/ system / bin / sh: sqlite3: no encontrado Esto está en el dispositivo rooteado con Android 4.0.2
Puntero nulo
Gracias marca Estoy un poco confundido Durante el desarrollo, ¿cómo puedo asegurarme de que mi versión sqlite sea coherente en todos los dispositivos? Quiero decir, ¿ tiene targetSdkVersiono buildTargettiene alguna influencia en eso?
Muhammad Babar
1
@MuhammadBabar Debe usar la respuesta de Juri para obtener la versión real de SQLite instalada en el dispositivo del usuario. targetSdkVerson y buildTarget no hacen ninguna diferencia.
Mark
59

Aunque la documentación proporciona 3.4.0 como número de referencia, si ejecuta el siguiente sql, notará que hay un número mucho mayor de SQlite instalado:

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

Esto es solo una pieza de código rápido y sucio para recuperar la versión sqlite. Por ejemplo, en un HTC Hero con Android 2.1, obtengo: 3.5.9 .

En mi Nexus One con Android 2.2, incluso obtengo 3.6.22 .

Juri
fuente
2
Me imagino que 3.4.0 se da como una versión mínima #: para la portabilidad, probablemente no debería asumir que es una versión superior a menos que tenga una buena razón para hacerlo.
Eno
2
Claro, tienes razón. Pero si tiene que usar algunas características avanzadas que pueden mejorar el rendimiento en versiones superiores de SQLite, puede usar el código para consultar y eventualmente cambiar el tipo de consulta dependiendo de la versión implementada :)
Juri
Mi Droid con una ROM personalizada 2.2 también informa 3.6.22
Austyn Mahoney
My Epic con pre-lanzamiento 2.2 dice 3.6.23: los números parecen ir avanzando lentamente.
dhaag23
1
Nexus 7 con Android 4.2, da 3.7.11
christophercotton
26
$ adb shell
$ sqlite3 --version
sqlite3 --version
3.5.9

Lo mismo en el emulador ADP1 1.6 y 2.1.

Yanchenko
fuente
Me da: sqlite3: permiso denegado
Yar
Funcionó bien para mí. Abrí cmd prompt y navegué a la carpeta de Android, donde se encontraba adb.exe. Luego
escribí
8
da "/ system / bin / sh: sqlite3: not found" en el Nexus 4 KitKat.
Ben Clayton
6

Una breve descripción de las API de Andorid y las versiones compatibles de SQLite.

ingrese la descripción de la imagen aquí

El resumen es del enlace en la respuesta de Mark Carters.

Petterson
fuente
0

En Room puedes consultar

SELECCIONE sqlite_version ()

RG

Rugido Grønmo
fuente