2010-03-10 18 views
232

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

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

+1

Aún puede querer copiar-soltar-recrear-reinsertar; La ALTER TABLE de SQLite no tiene muchas funciones. –

+0

Por favor, elija la respuesta correcta, 3.4.0 no es correcto – Noah

+0

¿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

Respuesta

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

Igual en ADP1 1.6 2.1 & emulador.

+0

Me da: sqlite3: permiso denegado – Yar

+0

Funcionó bien para mí. Abrí cmd prompt y navegué a la carpeta de Android, donde estaba ubicado adb.exe. Luego escribí los dos comandos – Pavenhimself

+5

que dan "/ system/bin/sh: sqlite3: not found" en el Nexus 4 KitKat. –

55

Aunque la documentación 3.4.0 da como número de referencia, si se ejecuta el siguiente código SQL, se dará cuenta de 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 sólo un pedazo 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.

+2

Imagino que 3.4.0 se da como una versión mínima # - para la portabilidad, probablemente no deba asumir que es una versión superior a menos que tenga una muy buena razón para hacerlo. – Eno

+2

seguro, tienes razón. Pero si tiene que usar algunas características avanzadas que pueden mejorar el rendimiento en versiones SQLite superiores, puede usar el código para consultar y eventualmente cambiar el tipo de consulta dependiendo de la versión implementada :) – Juri

+0

Mi Droid con un ROM 2.2 personalizado también informa 3.6 .22 –

446

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

Usando los emuladores (ADB shell sqlite3 --version):

ACTUALIZACIÓN : Lo sentimos, mayores (SDK 18 y anteriores) de trabajo diffs API a nivel de paquete se han detenido: https://issuetracker.google.com/issues/37048579

SQLite 3.19.4 (por alguna razón 3.19.4 no existe en notas de la versión de SQLite por lo que une a control de versiones check-ins en su lugar!) :

  • 27-8.1.0

SQLite 3.18.2:

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

SQLite 3.9.2:

  • 25-7.1.1-N MR1
  • 24 -7,0-N (nota: las previsualizaciones utiliza la misma versión)

SQLite 3.8.10.2:

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

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

  • 22-5.1.1-Lollipop

SQLite 3.8.6:

  • 21-5.0-Lollipop

SQLite (desconocido):

desgaste
  • 20-4.4W.2-Android (no hay emulador disponible, pero probablemente 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

SQLite 3.7.4:

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

SQLite 3.6.22:

  • 10-2.3.3-pan de jengibre
  • 9-2.3.1-pan de jengibre
  • 8 -2,2-Froyo

SQLite 3.5.9:

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

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

Nota: Estas son algunas de las anomalías (lista de ninguna manera exhaustiva):

SQLite 3.7.13 (en lugar de 3.7.11):

  • LG L70 MS323 LGMS323 | KOT49I.MS32310b (19- 4.4-KitKat)
  • LG Optimus G E975 LG-E975 | JZO54K (16-4.1-Jelly Bean)
  • LG G2 D802-D802 LG | 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-pan de jengibre, RK39F)
  • LG Optimus LTE F120K TAG/F120L (10 -2.3.3-Gingerbread, GRK39F)
  • LG Optimus LTE L-01D (10-2.3.3-pan de jengibre, GRJ90)
  • LG Optimus Net P690b (10-2.3.3-pan de jengibre, pan de jengibre)
  • 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-pan de jengibre, 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 estima 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 a GE t La versión de SQLite solo funciona en emuladores y en dispositivos con sqlite3 disponible: https://stackoverflow.com/a/3645800/444761

Para otros dispositivos, consulte Juri's answer.

He agregado un Issue #58909 al Android Issue Tracker. Por favor, marque esto si desea apoyarlo.

Nota: si desea que su aplicación utilice la misma versión de SQLite en todas las versiones de Android, considere usar this 3rd party SQLite support library.

+0

/system/bin/sh: sqlite3: no encontrado Esto está en el dispositivo rooteado Android 4.0.2 –

+0

Gracias marca. Estoy confundido un poco. Durante el desarrollo, ¿cómo puedo asegurarme de que mi versión sqlite se mantenga constante en todos los dispositivos? me refiero a 'targetSdkVersion' o' buildTarget' ¿tiene alguna influencia sobre eso? –

+0

@MuhammadBabar Debe usar la respuesta de Juri para obtener la versión actual de SQLite instalada en el dispositivo del usuario. targetSdkVerson y buildTarget no hacen diferencia. –

2

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

enter image description here

La visión general es desde el enlace de respuesta de Mark Carter.