Должен ли я использовать _ID в качестве первичного ключа SQlite? и это должен быть INT? (Android Dev) - PullRequest
8 голосов
/ 30 ноября 2010

Возможно, это глупый вопрос, но я пока не смог найти ответ.

Я хочу использовать столбец TEXT с моими собственными уникальными именами в качестве первичного ключа в таблице.Небольшой фрагмент кода для определения этого выглядит в моем проекте примерно так:

...blahblah..."CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + "_ID TEXT PRIMARY KEY,    "...blahblah..

Будет ли это работать так, как я собираюсь?Или, может быть, мне нужно использовать «AS ID»?Я только когда-либо вижу одиночные таблицы с _ID в качестве автоинкрементного целого числа. Также это было предназначено для использования в качестве внешнего ключа в другой таблице, но так как я разработал свою базу данных, я прочитал больше информации, и я не уверен, что это действительно будет иметь значение, используяandroid & SQLITE?

Благодаря постерам ниже, но я немного медленный и не уверен, правильно ли я применяю информацию, не могли бы вы проверить?

Так что, если у меня есть оператор create, подобный этому:

"CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + " TEXT PRIMARY KEY, " + 
    IN_OUT + " TEXT, " + BUDGET_AMOUNT + " REAL, " + ACTUAL_AMOUNT_SPENT + " REAL, "
    + AMOUNT_STRAYED + " REAL, " + OVERBUDGET_TF + " INTEGER, " + AUTOSPEND_TF + 
    " INTEGER);"

Тогда есть: db.execSQL ("SELECT ID, ID AS CAT_ITEM_ID")

Могу ли я использовать их взаимозаменяемо?я где-нибудь рядом?хаха извините я пытаюсь!

Ответы [ 3 ]

12 голосов
/ 30 ноября 2010

Вы можете создавать и определять таблицы по своему усмотрению, но если вам придется использовать таблицу через CursorAdapter, который не будет работать без настройки.

CursorAdapter: The Cursor must include a column named "_id" or this class will not work.

Вы должны всегда выдавать select col1 as _id ... для работы.

Так что рекомендуется использовать _id в схеме таблицы, и если вы хотите использовать другое имя, вы можете сделать это вот так. select _id, _id as customname ..., поэтому дважды выберите столбец _id с разными именами.

3 голосов
/ 30 ноября 2010

В качестве первичного ключа вы можете иметь все, что захотите.

Но если вы, например, хотите использовать CursorAdapter, который автоматически показывает элементы из запроса Cursor, вам нужно иметь целочисленный столбец с именем _ID, поскольку это используется здесь.

Но если это не то, что вы планируете использовать со своим столом, вы можете делать то, что хотите!

0 голосов
/ 04 октября 2013

_id должен иметь тип int в sqlite create (длинный в Java). Различные классы предполагают это. В результате вы не можете использовать UUID для первичного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...