О поле "_id" в Android SQLite

Нужно ли поле "_id" в Android SQLite?

Ответ 1

_id полезен, когда вы используете расширенные адаптеры, которые используют курсор (например, ResourceCursorAdapter). Он используется этими адаптерами для предоставления идентификатора, который может использоваться для ссылки на определенную строку в таблице, которая связывает элемент во всех используемых адаптерах (например, в строке в ListView).

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

Ответ 2

Почему бы не использовать _ ROWID_?

SQLite предоставляет это в любом случае для каждой строки, поэтому вы можете просто переписать его в _id в своем заявлении select.

Ответ 3

Технически нет поля _id не требуется, однако, если вы используете класс CursorAdapter (который вы, вероятно, используете, особенно если вы работаете с примером Notepad), тогда да

"Курсор должен содержать столбец с именем" _id "или этот класс не будет работа"

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

Ответ 4

Во многих случаях довольно удобно иметь поле id. Я предпочитаю, чтобы мой автоматически увеличивался (как показано ниже). Я всегда нахожу новые применения для поля id:)

Когда пришло время подключать данные к адаптеру, мне нравится использовать псевдоним имени таблицы для запроса поля id как _id. Пример: SELECT id _id, msg from message order by id. Таким образом, адаптер видит поле под названием _id, и все счастливы.

Вот пример того, как я определяю свои таблицы:

CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);

Ответ 5

Из официальных официальных документов...

Курсор должен содержать столбец с именем "_id" или этот класс не будет работать. Кроме того, использование MergeCursor с этим классом не будет работать, если объединенные курсоры имеют перекрывающиеся значения в своих столбцах "_id".

И Cursor:

Этот интерфейс обеспечивает случайный доступ для чтения и записи к набору результатов, возвращаемому запросом базы данных.

Другими словами, вам нужно _id для Android SQLite (который обычно использует Cursor)

Ответ 6

Если вы определяете свой столбец _id как целое число автоинкремент, это фактически псевдоним для столбца ROWID, который по умолчанию предоставляет SQLite (https://www.sqlite.org/lang_createtable.html#rowid).

Ваше выражение о создании нуждается в форме...

CREATE TABLE t(_id INTEGER PRIMARY KEY ASC, y, z);

Чтобы доказать, что это работает...

UPDATE t SET _id=22 WHERE _id=11;

затем

SELECT ROWID, _id FROM t;

и вы обнаружите, что оба _id и ROWID имеют одинаковое значение.

Обратите внимание, что если вы используете DESC в CREATE, создается новый столбец и ROWID не псевдонимы.

Ответ 8

Конечно, если вы создаете свой собственный виджет пользовательского интерфейса и свой собственный адаптер, вам не нужно называть ваш первичный ключ как "_id". Это может быть любое имя, которое вы хотите. Но вы несете ответственность за управление коллекциями пользовательских виджетах и ​​привязкой их к правой строке в своей базе данных. "_id" полезен только для ListView, как указал Брэд.