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.

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"?

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)

  • Acceso a la base de datos sqlite en el dispositivo android
  • Android / java Sqlite: ¿Cómo recuperar la fecha máxima?
  • Selección de un proyecto ORM para Android (nivel mínimo de API 7)
  • Android SQLite - selecciónArgs que no sean cadenas
  • Obtener mínimo de la columna de la base de datos SQLite?
  • Consulta SQLite SQLiteLog (1) no such Column:
  • Mejor alternativa de la librería Android de SQLite?
  • Consulta de mejores prácticas de SQLite para Android
  • AsyncTask de Android y instancia de SQLite DB
  • Nuevo carácter de línea \ n no se muestra correctamente en textView Android
  • Mueva el cursor a la fila por una de las columnas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.