Fug*_*gly 2 sqlite objective-c fmdb
我试图解决这个问题,但我似乎无法找到解决方案.我有一个表创建为:
[db executeUpdate:@"CREATE TABLE 'MEDIA' (identifier INTEGER PRIMARY KEY AUTOINCREMENT, taskIdentifier INTEGER, type INTEGER, data BLOB)"]
Run Code Online (Sandbox Code Playgroud)
我该如何在此表中插入记录?我试过这个:
[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES($next_id,?,?,?)" withArgumentsInArray:arguments];
Run Code Online (Sandbox Code Playgroud)
而参数是一个有4个值的NSArray,第一个是虚拟值(因为它应该自动增量),但无济于事.这应该如何与FMDB一起使用?
您需要问自己是否真的想要在那里使用AUTOINCREMENT关键字.AUTOINCREMENT与INTEGER PRIMARY KEY一起带来了非常具体的行为,这里将对此进行描述.您很可能不需要它,在这种情况下只需在列定义中保留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];但arguments数组只包含taskIdentifier,type和data的 3个值.
像这样提供标识符列的值:在索引0上使用[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?,?)" withArgumentsInArray:arguments];包含标识符作为NSNumber的arguments数组.
| 归档时间: |
|
| 查看次数: |
3143 次 |
| 最近记录: |