2012-07-06 67 views
1

看着this answer我試圖找出如何實際創建一個列,它只是一個ROWID的別名表。我想這樣做,因爲一些android類需要一個名爲'_id'的唯一列,但我不希望這個col是一個主鍵。我不能在col上使用AUTO_INCREMENT而不是PK,所以我只想將_id作爲別名。我知道我可以在查詢中這樣做,但這對我的情況並不實用。任何指針?這甚至有可能嗎?SQLite創建表的ROWID的別名

謝謝:)

編輯:真的,我只是希望能夠有我自己的PK,但也有一個ID字段CursorAdapters正常工作等

編輯:縱觀Do i have to use _ID as a SQlite primary key? and does it have to be an INT? (Android Dev)它建議做它在查詢中,如果我的PK也是一個數字類型,但如果它的一個TEXT列即時消息用於我的PK呢? (在這裏大聲思考) - 我想我可以複製CursorAdaptor,只是getString而不是長的_id col(再加上,傳遞col的名字作爲PK在光標適配器中,擺脫_id!)或者只是在SELECT中添加一個ROWID的別名作爲_id,雖然感覺有點哈克...

回答

0

TBH,我不認爲這是真的可行。你需要有這樣的PK專欄(儘管有很多黑客可以創建某種解決方法)。

我寧願建議將_id列作爲技術PK,並有一個額外的列作爲邏輯PK,即只是一個具有唯一約束的自由定義的列。您的程序邏輯應該能夠簡單地對所有操作使用邏輯PK。當然,這將需要你使用自定義查詢進行查找操作等,但通常更合適。

心連心..

2

你可能有一個主鍵是完全獨立的SQLite的內置rowid

每個SQLite表的每一行都有一個64位有符號的整數鍵,用於唯一標識其表中的行。這個整數通常被稱爲「rowid」。可以使用特殊大小寫無關名稱「rowid」,「oid」或「rowid」替代列名稱來訪問rowid值。

你可以制定你的查詢,以便內置的ROWID被隱藏的ROWID列前添加到您的結果稱爲_idCursorAdaptor的好處:

select _rowid_ as _id, ... 

的ROWID是唯一的,但不必是主鍵。您可以在CREATE TABLE語句中使用任何您喜歡的主鍵。

+0

+1謝謝你的回答。我意識到這是一個可能的解決方案,但想看看是否有其他解決方案。希望他們剛剛做到了,所以你可以將一個PK col名稱傳遞給適配器,並且它將傳遞值而不是有時很尷尬的_id值 – Dori 2012-07-09 11:03:45