Tengo una aplicación para Android, y todas mis pruebas hasta ahora han estado en mi teléfono Froyo. Acabo de comenzar a probar contra 1.6 y 2.1 en el emulador, y se bloquea al inicio. No puede encontrar una columna en una de mis vistas.Diferencias de SQLite entre Android 2.1 y 2.2
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 adb shell
la conexión a los distintos casos 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 de 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. This answer útilmente da las versiones de SQLite que se enviaron con cada nivel de la API de Android. Dice que SQLite se actualizó de 3.5.9 a 3.6.22 entre 2.1 y 2.2. En cuanto a the SQLite release history, no veo nada particularmente obvio que pueda explicar la diferencia.
¿Alguien puede identificar exactamente qué ha cambiado y sugerir cómo puedo evitarlo para que mi código funcione en dispositivos anteriores a Froyo?
I Estoy tratando de asegurarme de que no te saltees obvio. ¿"Limpiaste los datos" en el emulador/dispositivo antes de intentar? ¿Tal vez tienes una versión dev más antigua y esta vista no tiene una columna en ese emulador/dispositivo? – katit
@katit Sí, completamente limpio. Creé nuevas AVD vacías específicamente para probar esto. –