2009-11-24 84 views
0

我是新來的sqlite,所以請耐心等待:)我如何重新排序在sqlite的主索引與UITableView一起使用?

我有一個UITableView讀取來自sqlite數據庫的數據。 如果我刪除一條記錄,數據庫中的行將被刪除。問題在於其他行保留其主鍵,例如,我有3行,主鍵是1,2,4。 有沒有可能將鍵更新爲1,2,3?

非常感謝!

編輯:創建我的表:

CREATE TABLE mytable (ID INTEGER PRIMARY KEY AUTOINCREMENT, value1 TEXT); 
+0

如果我理解正確,您希望在刪除後重新排序主鍵。 – 2009-11-24 17:59:43

+0

是的,你說得對。 :)你知道有這種可能嗎? – user134282 2009-11-24 18:05:41

回答

1

使用 REINDEX(只REINDEX重建索引結構,它實際上並沒有改變任何率的值。)

使用中行的排序作爲隱式指數

而不是試圖改變一大堆行的索引值,爲什麼不執行排序順序的映射?

使用SELECT語句,如:

NSString* query = @"SELECT * FROM myTable ORDER BY id LIMIT 1 OFFSET %d"; 
query = [NSString stringWithFormat:query, indexPath.row + 1]; 

刪除行做這樣的事情:

NSString* query = @"DELETE FROM myTable WHERE ID = (SELECT ID FROM myTable ORDER BY ID LIMIT 1 OFFSET %d)"; 
query = [NSString stringWithFormat:query, indexPath.row + 1]; 

插入,定期進行插入像往常一樣。

這樣,當您刪除一行時,最終不需要編輯每一行的ID大於您要刪除的行。這會更快。

確保在數據庫發生更改時更新您的表視圖,以保持表視圖與數據庫一致。

這也有保持您的表視圖排序好的副作用。

定義一個觸發器,以改變受影響的索引

如果你真的想保持索引,使他們完美的系列(即:1,2,3,4,...)

您可以像這樣定義刪除觸發器:

CREATE TRIGGER reindex AFTER DELETE ON myTable FOR EACH ROW 
BEGIN 
    UPDATE myTable SET ID = old.ID - 1 WHERE ID > old.ID; 
END; 
+0

我已經嘗試過REINDEX mytable。不幸的是,這並沒有工作:( – user134282 2009-11-24 18:15:29

+0

你可以編輯你的問題,以顯示你如何創建表和索引? – 2009-11-24 18:16:29

+0

謝謝,我會嘗試。如何刪除記錄或添加一個? – user134282 2009-11-24 18:25:27