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