Intereting Posts
Drawerlayout просмотра детей наложения База данных андроид SQLite удалена после удаления Как я могу предотвратить автоматическую блокировку Android, пока активность (приложение) находится в фокусе? Перетаскивание элементов в RecyclerView с помощью GridLayoutManager Не удается создать файл в общей папке на Google Диске Как обнаружить событие TOUCH другим пальцем, когда ACTION_MOVE находится в процессе AppCompat 23.2 использует VectorDrawableCompat с RemoteViews (AppWidget) в API <21 Android, как получить SNR (отношение сигнал / шум) Конфигурация виртуального устройства Android для 7-дюймового планшета в Android SDK 2.3.3 Как использовать Android SyncAdapter? Линт не удался при использовании приложения для Android Изменение нижнего колонтитула и текстовых цветов TabPageIndicator (ViewPagerIndicator) ? Android: attr / selectableItemBackground недостаточно заметен на темном фоне SVG в Android-браузере Android: как программно установить размер макета

Обозначение индекса столбца SQLite создает таблицу

Это запрос, который я использую для создания таблицы

create table site_table( _id integer primary key autoincrement, name_site text, url text, login text, pass text ); 

Я назвал Cursor.getColumnNames() и заметил, что порядок столбцов – это id, login, pass, name, url .

Итак, если мне нужно значение, я должен получить его по индексу Cursor.getString(index) . До тех пор, пока я не отлаживался, я испортил вызов неправильного индекса, но теперь мне интересно, почему SQLite экономит этот путь? Почему это не соответствует тому, что я создал id, name_site, url, login and pass ?

благодаря

Итак, если я хочу значение, я должен получить его по индексу Cursor.getString (index)

Так, например, по этой причине вы всегда должны использовать

 c.getString(c.getColumnIndex("ColName")); // or better getColumnIndex(CONSTANT) 

Этот метод спасает всех нас и гарантирует, что вы никогда не получите неправильные результаты. Как правило, этот метод рекомендуется, а также сохранение COLUMN_NAMES качестве CONSTANTS в отдельном классе – очень, очень полезная и эффективная практика.

Примечание: порядок зависит от проекции, т. select name, lastname from table

Эти данные упорядочиваются по заказу, который вы запросили в запросе, а не в том порядке, в котором вы создали таблицу. Таким образом, вы, вероятно, изменили порядок в запросе, который сгенерировал указанный курсор.

Порядок столбцов в вашем курсе зависит от проекции. Чтобы убедиться, что вы используете правильный индекс столбца, используйте c.getString(c.getColumnIndexOrThrow("COLUMN_NAME")) где c – ваш курсор.

Я просто сделал опыт из первых рук:

Индексы столбцов курсора в результате

SELECT * FROM mytable WHERE …

Запрос иногда (не всегда) отличается от того, что браузер SQLITE Database Browser показывает как порядок столбцов на вкладке Структура базы данных. Поэтому ссылки на столбцы с помощью getColumnIndex кажутся единственным безопасным способом.