2009-05-29 79 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了解更多详情