Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用自动增量将FMDB插入到_Objective C_Sqlite_Fmdb - Fatal编程技术网

Objective c 使用自动增量将FMDB插入到

Objective c 使用自动增量将FMDB插入到,objective-c,sqlite,fmdb,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($ne

我一直在想办法,但似乎找不到解决办法。我有一个创建为以下内容的表:

 [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与INTEGER主键一起带来了非常具体的行为,如下所述。很可能您不需要它,在这种情况下,只需在列定义中保留INTEGER主键即可。 现在,定义为INTEGER主键的列实际上变成了ROWID的别名,因此您有两个选项:

  • 在INSERT语句中省略此列的值。这将自动在此处插入下一个可用值。从文档中:
    通常的算法是在插入之前为新创建的行指定一个比表中最大行ID大一的行ID。
    因此,您的插入将如下所示:
    [db executeUpdate:@“insert INTO'MEDIA'VALUES(?,,?)”with argumentsInArray:arguments]
    但是arguments数组将只包含taskIdentifier、type和data的3个值

  • 为标识符列提供如下值:
    [db executeUpdate:@“插入到带有ArgumentsInArray:arguments的“媒体”值(?,?,?)”,参数数组包含索引0上作为NSNumber的标识符