【问题标题】:FMDB Insert into with AutoIncrementFMDB 使用 AutoIncrement 插入
【发布时间】:2012-06-03 21:51:29
【问题描述】:

我一直在尝试解决这个问题,但我似乎找不到解决方案。我有一个创建为:

 [db executeUpdate:@"CREATE TABLE 'MEDIA' (identifier INTEGER PRIMARY KEY AUTOINCREMENT, taskIdentifier INTEGER, type INTEGER, data BLOB)"]

我应该如何在这个表中插入一条记录?我试过这个:

 [db executeUpdate:@"INSERT INTO 'MEDIA' VALUES($next_id,?,?,?)" withArgumentsInArray:arguments];

而 arguments 是一个有 4 个值的 NSArray,第一个是一个虚拟值(因为它应该自动递增)但无济于事。这应该如何与 FMDB 一起使用?

【问题讨论】:

    标签: objective-c sqlite fmdb


    【解决方案1】:

    您需要问自己是否真的想在此处使用 AUTOINCREMENT 关键字。 AUTOINCREMENT 与 INTEGER PRIMARY KEY 一起带来了非常具体的行为,在here 中进行了描述。您很可能不需要它,在这种情况下,只需将 INTEGER PRIMARY KEY 留在列定义中即可。 现在,定义为 INTEGER PRIMARY KEY 的列真的变成了 ROWID 的别名,所以你有两个选择:

    • 在 INSERT 语句中省略该列的值。这将自动在那里插入下一个可用值。从文档: The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert. 所以你的 INSERT 看起来像这样:[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?)" withArgumentsInArray:arguments]; 但参数数组将只包含 taskIdentifiertypedata的 3 个值>.

    • 像这样为 identifier 列提供值:[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?,?)" withArgumentsInArray:arguments];,参数数组包含索引 0 上的 NSNumber 标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多