Android: sqlite: cursor: getColumnIndex
Tengo una consulta bastante complicada (combinaciones múltiples) en una base de datos normalizada de sqlite. La consulta hace un SELECT * para habilitar alguna lógica de selección automática de atributo (por lo que no puedo eliminar el "*")
El problema que tengo es que mi conjunto de resultados contiene varias columnas con el mismo nombre de atributo. Por ejemplo, un atributo común a cada tabla en la consulta es "_id". Cuando voy a llamar a "cursor.getColumnIndex("_id")"
el valor devuelto es siempre el índice del último atributo "_id"
en la lista de columnas del conjunto de resultados (es decir, no el que quiero). Me encantaría poder usar mis prefijos de alias de SQL como cursor.getColumnIndex("A._id")
pero eso no funciona.
- Enviar una base de datos a través de ftp - Obtener un archivo diferente
- ¿Cómo usar SQLite de Servicios en Android?
- Android: Obtener registro aleatorio en SQLite
- Custom ListView con la fecha como SectionHeader (Custom SimpleCursorAdapter utilizado)
- Crear la función definida por el usuario en sqlite android?
PREGUNTAS
Parece que cursor.getColumnIndex(AttributeName)
devuelve el índice del último "AttributeName". ¿Alguien puede confirmar esto? Además, cualquier sugerencia sobre cómo devolver el índice del atributo 1 con "AttributeName"? O mejor el X atributo que tiene "AttributeName"?
- Inserción SQLite de Android única
- Consulta de eliminación de Android
- ¿Debo usar siempre transacciones en android sqlite?
- Establecer un valor predeterminado en una columna en SQLite
- Esquema de etiqueta para una aplicación de Android
- Desarrollo de Android - SQLite storage float
- ¿Qué es un buen tutorial para usar ORMLite con SQLite y Android
- ¿Cómo mostrar los datos de la base de datos en un RecyclerView con alto rendimiento?
Puedes hacerlo:
SELECT _id as myID, * FROM myTable
Esto significa que el campo _id
aparecerá dos veces para cada tabla en sus resultados, pero una de las dos columnas tendrá un nombre único que debería permitirle encontrarlo.
Desafortunadamente la documentación no menciona nada sobre lo que tienes que hacer, así que estoy asumiendo que no se puede hacer.
Sin embargo, usted dice
La consulta hace un SELECT * para habilitar alguna lógica de selección automática de atributo (por lo que no puedo eliminar el "*")
¿Qué es esta "lógica de selección automática de atributos" de la que habla? ¿Por qué necesita esto?
Otra solución es:
"SELECT tableName.columnName FROM tableName"
Y luego hacer lo mismo con:
cursor.getColumnIndex("tableName.columnName");
Esto es lo que hace MS-Access. Puede crear una consulta y luego ver el código SQL generado (simplemente ir al menú 'ver' y seleccionar 'Vista SQL' desde la ventana de diseño de la consulta)
- No se pudo encontrar la clase 'android.webkit.WebResourceResponse' cuando se ejecuta HelloCordova en Android 2.2
- Aplicar EffectFactory Efectos en CameraPreview