【问题标题】:Why is SQLite not incrementing my primary key?为什么 SQLite 不增加我的主键?
【发布时间】:2011-07-20 21:39:42
【问题描述】:

这是我的桌子,

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?

我的插入查询有什么问题吗?

谁能通过示例创建、插入和选择查询来解释我,其中主要是自动增量?

【问题讨论】:

  • 奇怪...我也想知道...

标签: iphone objective-c sqlite


【解决方案1】:

不要在插入语句中显式设置主键,让系统使用自动增量分配它。

将插入语句更改为:

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

【讨论】:

  • 为主键插入 NULL 应该是等效的,并且也会导致自动递增。不过,我同意你的语法要好一些。
  • 没错,所以我的建议应该和原来的sql相当。
【解决方案2】:

检查您的表格是否有记录。您可以使用 sqlite3_mprintf。 here了解更多详情

【讨论】:

    【解决方案3】:

    我真的不知道为什么它不起作用,您可能正在重新连接或其他什么。 我还建议不要寻找最后一行 id,因为另一个进程可能会并行增加它。

    【讨论】:

    • 另外,我相信 sqlite3_last_insert_rowid 会给你插入任何表的最后一行 id,所以如果你在数据库中有多个表(经常发生),这真的会让你一头雾水。我知道我因为这样的原因停止使用它。
    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2012-01-05
    • 2011-06-02
    • 2023-02-25
    相关资源
    最近更新 更多