Android: sqlite: cursor: getColumnIndex
У меня довольно сложный запрос (несколько объединений) в нормализованной базе данных sqlite. Запрос выполняет SELECT *, чтобы включить некоторую автоматическую логику выбора атрибутов (поэтому я не могу устранить "*" )
Проблема, с которой я столкнулась, состоит в том, что мой результирующий набор содержит несколько столбцов с тем же именем атрибута. Например, один атрибут, общий для каждой таблицы в запросе, - "_id". Когда я перехожу к вызову "cursor.getColumnIndex("_id")"
, возвращаемое значение всегда является индексом последнего атрибута "_id"
в списке столбцов набора результатов (т.е. Не тот, который я хочу). Мне бы очень хотелось использовать префиксы псевдонимов SQL, например cursor.getColumnIndex("A._id")
, но это не работает.
Вопросы
Похоже, что cursor.getColumnIndex(AttributeName)
возвращает индекс последнего "AttributeName" . Может ли кто-нибудь подтвердить это? Кроме того, любые предложения о том, как вернуть индекс 1-го атрибута с именем "AttributeName" ? или лучше X-й атрибут с именем "AttributeName" ?
Ответы
Ответ 1
Вы можете сделать это:
SELECT _id as myID, * FROM myTable
Это означает, что поле _id
будет отображаться дважды для каждой таблицы в ваших результатах, но один из двух столбцов будет иметь уникальное имя, которое должно позволить вам его найти.
Ответ 2
К сожалению, документация не упоминает ничего о том, что вам нужно делать, поэтому я предполагаю, что это невозможно.
Однако вы говорите
В запросе используется SELECT * для включения некоторого автоматического выбора атрибутов логики (поэтому я не могу устранить "*" )
Что это за "автоматическая логика выбора атрибутов", о которой вы говорите? Зачем вам это нужно?
Ответ 3
Другое решение:
"SELECT tableName.columnName FROM tableName"
а затем выполните то же самое с:
cursor.getColumnIndex("tableName.columnName");
Это то, что делает MS-Access. Вы можете создать запрос, а затем просмотреть сгенерированный код SQL (просто перейдите в меню "Просмотр" и выберите "SQL-представление" из окна запроса dessign)