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 
  • Intente volver a abrir un objeto ya cerrado: SQLiteDatabase:
  • Sincronizar SQLite DB en la aplicación android con el DB remoto de MySQL
  • Android - ¿SimpleCursorAdapter permite múltiples diseños como BaseAdapter?
  • Cómo agregar fecha en la base de datos sqlite
  • ¿Por qué ContentValues ​​tiene un método put que admite booleanos?
  • Mostrar el contenido de la base de datos sqlite en formato pdf en android
  • Intenta invocar el método virtual 'java.lang.Class java.lang.reflect.Field.getType ()' en una referencia de objeto nulo
  • ¿Cómo obtener el recuento de filas de una consulta en Android usando SQLite?
  • Cómo evitar errores de bloqueo de SQLiteException
  • ¿Cuántas tablas y bases de datos puedo crear en Android sqlite?
  • ¿Cómo actualizar el esquema de la tabla después de una actualización de la aplicación en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.