Diferencias de SQLite entre Android 2.1 y 2.2

Tengo una aplicación para Android, y todas mis pruebas hasta ahora han estado en mi teléfono Froyo. Acabo de comenzar las pruebas contra 1.6 y 2.1 en el emulador, y se bloquea en el inicio. No puede encontrar una columna en una de mis vistas.

05-17 23:31:31.446: ERROR/AndroidRuntime(198): Caused by: android.database.sqlite.SQLiteException: no such column: categoryTable.currentBal: , while compiling: SELECT SUM(categoryTable.currentBal) FROM catDisplayTable WHERE masterCategoryName != "__Hidden__" 

El esquema de la vista es el siguiente:

 CREATE VIEW catDisplayTable AS SELECT categoryTable._id, categoryTable.name, categoryTable.currentBal, categoryTable.sequence, categoryTable.note, masterCategoryTable.name AS masterCategoryName FROM categoryTable LEFT OUTER JOIN masterCategoryTable ON categoryTable.masterCategoryId = masterCategoryTable._id; 

Con el adb shell conectando a las varias instancias de emulador, he confirmado que (1) el esquema correcto está en su lugar en todos los casos, y (2) en 1.6 y 2.1, SQLite es simplemente incapaz de localizar las columnas en esta vista, incluso con Algo tan simple como

 SELECT categoryTable.name FROM catDisplayTable; 

o

 SELECT name FROM catDisplayTable; 

Funciona bien en 2.2.

Mi presunción, por lo tanto, es que algo ha cambiado en SQLite entre Android 2.1 y 2.2. Esta respuesta proporciona útil las versiones de SQLite que se enviaron con cada nivel de API de Android. Se dice que SQLite se actualizó de 3.5.9 a 3.6.22 entre 2.1 y 2.2. Mirando el historial de la versión de SQLite , no veo nada particularmente obvio que pueda explicar la diferencia.

¿Puede alguien identificar exactamente lo que ha cambiado, y sugerir cómo puedo evitarlo para que mi código funcione en dispositivos pre-Froyo?

4 Solutions collect form web for “Diferencias de SQLite entre Android 2.1 y 2.2”

Tengo el mismo problema en mi aplicación. El denominador común es que también uso Views y tengo claves foráneas.

He descargado mi base de datos desde el emulador. No tengo problemas para ejecutar la consulta fuera del sistema operativo Android 2.1.

Dio la respuesta mp2526 un ir, pero la consulta con "columnx AS columnx" no hizo ninguna diferencia. Voy a tratar de aislar el problema.

Me he topado con un problema con SQLite cuando uso DISTINCT que tal vez el mismo problema que se está ejecutando con SUM.

En las versiones anteriores del sistema operativo cuando se utiliza DISTINCT, tuve que alias los nombres de las columnas o la lógica fallaría con un similar si no exactamente el mismo error (no recuerdo exactamente cuál era el error), pero supongo que lo arreglaron en más adelante Versiones del sistema operativo.

ejemplo

 SELECT DISTINCT _id AS _id, test AS test FROM table 

Funciona para todas las versiones

 SELECT DISTINCT _id, test FROM table 

Fallaría para sistemas operativos anteriores

Sólo se encontró con el mismo problema. Funciona cuando volví a ver la declaración utilizando Column AS Column notations.

El problema es que Android 2.1 devuelve las columnas junto con sus nombres de tabla, por lo que una consulta como

 SELECT id FROM table 

table.id una columna con nombre table.id

La solución, como ya se ha señalado, es escribir

 SELECT id as id FROM table 
  • ¿Cómo evitar la inserción de duplicados en la base de datos SQLite?
  • Android - SimpleCursorAdapter.ViewBinder - Establecer el color de fondo
  • ¿Dónde está almacenada mi base de datos sqlite en android?
  • ¿Cómo implementar la búsqueda difusa con FTS3 de SQLite?
  • Base de datos de SQLite de SQL, bloqueo y versión
  • Desarrollo de Android - SQLite storage float
  • Cómo probar proveedores de contenido en Android
  • Android.database.sqlite.SQLiteCantOpenDatabaseException: error desconocido (código 14): No se pudo abrir el problema de la base de datos
  • Error al leer la fila 0, columna 0 de una CursorWindow que tiene 0 filas, 64 columnas
  • Aclaración sobre el row_id devuelto por la instrucción de inserción de sqlite
  • Uso de la palabra clave IN en android sqlite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.