2013-03-31 3 views
4

Это запрос, который я использую, чтобы создать таблицуКолонка Индекс 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?

Благодаря

ответ

4

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

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

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

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

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

+0

Спасибо, что ответ, решенный для меня, в ответ на ПРИМЕЧАНИЕ, это не так, я думаю, потому что, когда метод запроса, я не указывал порядки столбца. Метод: database.query (TABLE_NAME, идентификатор WHERE, ..рест - null); – Rigotti

+0

@ Rigotti приветствую :) Я только упомянул, что он также зависит от проекции, если вы используете необработанные утверждения. – Sajmon

1

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

1

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

0

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

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

SELECT * FROM mytable WHERE ...

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

Смежные вопросы