В соответствии с Руководством Android-разработчика ,
Примечание. Поставщику не требуется первичный ключ, и ему не нужно использовать _ID в качествеимя столбца первичного ключа, если таковой имеется.Однако, если вы хотите привязать данные от поставщика к ListView, одно из имен столбцов должно быть _ID.Это требование более подробно объяснено в разделе «Отображение результатов запроса».
Далее в руководстве объясняются основы того, зачем вам нужно уникальное значение, предоставленное primary key
,
Табличные данные должны всегда иметь столбец «первичного ключа», который поставщик поддерживает как уникальное числовое значение для каждой строки.Вы можете использовать это значение, чтобы связать строку со связанными строками в других таблицах (используя его как «внешний ключ»).Хотя вы можете использовать любое имя для этого столбца, лучше использовать BaseColumns._ID, , поскольку для привязки результатов запроса поставщика к ListView требуется, чтобы один из полученных столбцов имел имя _ID. [emphasisмой]
Чтобы ответить на ваши вопросы в том порядке, в котором вы их задали:
- Наличие столбца
_ID
- это лучшая практика для универсальности.Его не нужно отображать, но он прекрасно работает как первичный ключ (и внешний ключ!), Необходимый для курсоров и запросов. - Если он идентифицирован BaseColumns, он автоматически идентифицирует этот столбец как первичный ключ, уникальный (очевидно) и инструктирует его для автоинкремента.
- Предположительно, реализовать BaseColumns проще, чем вводить эти свойства для вашегозакрытые поля.
_COUNT
- это просто количество строк в каталоге. Если строки таблицы удаляются и добавляются, то нетпричина полагать, что целое число _ID
элемента имеет какое-либо отношение к моменту его добавления или свойствам сортировки.Другими словами, last_insert_rowid()
НЕ РАВНО Count()
.Столбец _COUNT просто предоставляет способ показать, сколько результатов возвращается по запросу, В КАЖДОЙ ЛИНИИ этого запроса.Для наглядного ознакомления см. linuxtopia.org