FMDB插入AutoIncrement

时间:2012-05-29 16:28:58

标签: objective-c sqlite fmdb

我试图解决这个问题,但我似乎无法找到解决方案。我有一个创建为:

的表
 [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];

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

1 个答案:

答案 0 :(得分:5)

你需要问问自己,你是否真的想拥有AUTOINCREMENT关键词。 AUTOINCREMENT与INTEGER PRIMARY KEY一起带来了非常具体的行为,其描述为here。您很可能不需要它,在这种情况下只需在列定义中保留INTEGER PRIMARY KEY。 现在,定义为INTEGER PRIMARY KEY的列实际上成为ROWID的别名,因此您有2个选项:

  • 在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];但是arguments数组只包含 taskIdentifier type 的3个值数据

  • 提供标识符列的值,如下所示:[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?,?)" withArgumentsInArray:arguments];,其索引数组中的参数数组包含 NSNumber