繁体   English   中英

FMDB自动插入

[英]FMDB Insert into with AutoIncrement

一段时间以来,我一直在试图找出答案,但似乎找不到解决方案。 我有一个表创建为:

 [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应该如何使用?

您需要问自己是否真的要在其中使用AUTOINCREMENT关键字。 AUTOINCREMENT与INTEGER PRIMARY KEY一起带来了非常具体的行为,这说明在这里 您很有可能不需要它,在这种情况下,只需将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数组将只包含taskIdentifiertypedata的 3个值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM