Android: sqlite: курсор: getColumnIndex - PullRequest
12 голосов
/ 01 ноября 2011

У меня довольно сложный запрос (несколько объединений) в нормализованной базе данных sqlite. Запрос выполняет SELECT *, чтобы включить некоторую логику автоматического выбора атрибута (поэтому я не могу исключить "*")

Проблема, с которой я столкнулся, состоит в том, что мой набор результатов содержит несколько столбцов с одинаковым именем атрибута. Например, одним атрибутом, общим для каждой таблицы в запросе, является «_id». Когда я иду на вызов "cursor.getColumnIndex("_id")", возвращаемое значение всегда является индексом последнего атрибута "_id" в списке столбцов набора результатов (т. Е. Не того, который я хочу). Я хотел бы иметь возможность использовать мои префиксы псевдонимов SQL, такие как cursor.getColumnIndex("A._id"), но это не работает.

* 1009: QUESTIONS *

Похоже, что cursor.getColumnIndex(AttributeName) возвращает индекс последнего "AttributeName". Кто-нибудь может это подтвердить? Кроме того, какие-либо предложения о том, как вернуть индекс 1-го атрибута с «AttributeName»? или лучше X-й атрибут, имеющий «AttributeName»?

Ответы [ 3 ]

8 голосов
/ 01 ноября 2011

Вы можете сделать это:

SELECT _id as myID, * FROM myTable

Это означает, что поле _id появится дважды для каждой таблицы в ваших результатах, но один из двух столбцов будет иметь уникальное имя, которое должно позволить вам его найти.

0 голосов
/ 14 февраля 2013

Решение oder:

"SELECT tableName.columnName FROM tableName"

и затем сделайте то же самое с:

cursor.getColumnIndex("tableName.columnName");

Это то, что делает MS-Access.Вы можете создать запрос, а затем просмотреть сгенерированный код SQL (просто перейдите в меню «Вид» и выберите «Вид SQL» в окне запроса)

0 голосов
/ 01 ноября 2011

К сожалению, в документации ничего не говорится о том, что вам нужно делать, поэтому я предполагаю, что это невозможно.

Однако вы говорите

Запрос выполняет SELECT *, чтобы включить автоматический выбор атрибутов. логика (поэтому я не могу исключить "*")

О какой «логике автоматического выбора атрибута» вы говорите? Зачем вам это нужно?

...