Intereting Posts
Диалоговое окно Android без кнопок Android: Когда следует использовать Handler () и когда следует использовать Thread? Android: LocationManager динамически регулирует пороговые значения minTime / minDistance Универсальный загрузчик изображений roundedBitmapDisplayer Переопределить версию Java при построении проекта Cordova с помощью градации Как повлиять на создание кода Delphi XEx для целей Android / ARM? Comodo SSL: ERR_CERT_AUTHORITY_INVALID на мобильных устройствах Chrome и Opera (Android) Как изменить цвет текста кнопки Android в глобальном масштабе в теме Анимация и поворот изображения в виде поверхности Как обрабатывать изменение ориентации экрана, когда диалог выполнения и фоновый поток активны? Автоматическое исполнение Android-проекта с git с помощью Android Studio / Gradle Этот класс обработчика должен быть статическим или может возникнуть утечка: AsyncQueryHandler Как вычислить положение по кругу с определенным углом? Как записать видео с помощью предварительного просмотра камеры в TextureView Как получить доступ к sms-времени, которое я получил во входящих?

Android: sqlite: cursor: getColumnIndex

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

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

Вопросов

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

Solutions Collecting From Web of "Android: sqlite: cursor: getColumnIndex"

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

 SELECT _id as myID, * FROM myTable 

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

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

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

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

В чем заключается эта «автоматическая логика выбора атрибутов»? Зачем вам это нужно?

Другое решение:

 "SELECT tableName.columnName FROM tableName" 

А затем выполните то же самое с:

 cursor.getColumnIndex("tableName.columnName"); 

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