2010-11-30 108 views
8

這可能是一個愚蠢的問題,但我還沒有找到答案。我是否必須使用_ID作爲SQlite主鍵?它是否必須是一個INT? (Android Dev)

我想使用具有我自己的唯一名稱的TEXT列作爲表中的主鍵。 代碼的小部分來定義這個看起來在我的項目是這樣的:

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

將這項工作作爲我打算?或者也許我需要使用「AS ID」?我只看到_ID作爲自動增量整數的單個表。此外,這是打算在另一個表中的外鍵,但因爲我設計了我的數據庫,我讀了更多的信息,我不知道這真的很重要android & SQLITE?

感謝下面的海報,但我有點慢,不知道我是否應用信息的權利,你可以檢查?

所以,如果我有這樣的創建語句:

"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」)

我可以再交替使用它們?我什至離任何地方近?哈哈抱歉,我正在嘗試!

回答

12

您可以根據需要創建和定義表格,但是如果您必須通過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列。

+0

謝謝你的迴應!但是我仍然有點遲緩恐怕,如果你能在我原來的帖子中查看我對你的建議的使用,我真的很感激它! – Holly 2010-11-30 13:43:54

3

你可以擁有任何你想要的主鍵。

但是,如果您想要使用自動顯示Cursor查詢中的項目的CursorAdapter,則需要在此處使用名爲_ID的整數列。

但是,如果這不是你打算用你的桌子,你可以做你想做的!

+0

謝謝!但我想我會需要一個CursorAdapter,所以我必須有一個整數吧。好的歡呼聲。我可以使用INT _ID但沒有真正使用它,也就是說,我可以說「檢索整個記錄在這個TEXT列==」食物「的權利?無論如何,謝謝你的幫助! – Holly 2010-11-30 13:47:29

0

_id在sqlite create中必須是int類型(long在Java中)。各種類別都假設因此,您不能使用主鍵的UUID。