2009-05-29 41 views
0

這裏是我的表,SQLite爲什麼不增加我的主鍵?

sqlStmt = [ [ NSString stringWithFormat:@"Create Table %@ (recordNo INTEGER PRIMARY KEY AUTOINCREMENT, noOfPlayer INTEGER, smallBlindAmt INTEGER, bigBlindAmt INTEGER , startingChips INTEGER, roundTimer INTEGER) " , SETTINGS_TABLE ] StringUsingEncoding:NSUTF8StringEncoding ] ; 

插入查詢,

sqlStmt = [ [ NSString stringWithFormat: @"insert into %@ values (NULL,%d, %d ,%d ,%d ,%d)" , strTableName ,noOfPlayers, SmallAmt, BigAmt, StartingChips, RoundTime ] UTF8String ] ; 

獲得最後一個記錄的記錄ID,

lastRecordNo = sqlite3_last_insert_rowid(dbObj); 

的lastRecordNo始終爲0,而​​我無法插入另一個值因爲它給出的錯誤主鍵必須是唯一的。

我無法得到與之相關的問題?

如何獲取主鍵和自動增量的最後一個記錄ID。

我的插入查詢有什麼問題嗎?

任何人都可以用示例創建,插入和選擇查詢,其中主要是一個自動增量嗎?

+0

奇怪...我也想知道... – Fortega 2009-05-29 11:47:21

回答

0

我真的不知道它爲什麼不起作用,你可能正在重新連接或什麼。 我也建議不要查找最後一行id,因爲另一個進程可能並行增加它。

+0

另外,我相信sqlite3_last_insert_rowid會給你插入任何表的最後一行id,所以如果你有一個數據庫中的多個表發生)這可以真的把你搞砸了。我知道因爲這樣的原因我停止使用它。 – 2009-05-29 16:03:39

2

不要在插入語句中顯式設置主鍵,讓系統使用自動增量分配它。

改變插入語句:

insert into %@ (noOfPlayer, smallBlindAmt, bigBlindAmt, startingChips, roundTimer) values (%d, %d ,%d ,%d ,%d) 
+0

爲主鍵插入NULL應該是等效的,並且還會導致自動遞增。不過,我同意你的語法更好一些。 – 2009-06-22 06:06:51

1

檢查表中的記錄。你可以使用sqlite3_mprintf。 here瞭解更多詳情