Objective-c FMDB SQLite插入withParameterDictionary和自动增量键

时间:2013-02-23 17:58:50

标签: objective-c sqlite fmdb

我有一个使用FMDB库的iOS应用程序。

有一个7字段的SQLite DB(1个自动增量,6个常规文本字段)。

我正在尝试执行

 [db executeUpdate:@"INSERT INTO messages  VALUES (:field1,:field2,:field3,:field4,:field5,:field6)" withParameterDictionary:message];

但是因为只有6个字段我收到错误。我无法插入自动增量值,因为我不知道它是什么(我想我可以单独查询...)。我试图避免注入易感的语法

NSString* sql = [NSString stringWithFormat:@"insert into messages (%@) values (%@)", [newCols componentsJoinedByString:@", "], [newVals componentsJoinedByString:@", "]];

感谢您的建议!

3 个答案:

答案 0 :(得分:3)

您没有指定哪个列是自动增量列,因此我假设它只是" field1"。在构建字典时,请添加以下内容:

[message setObject:[NSNull null] forKey:@"field1"];

然后

[db executeUpdate:@"INSERT INTO messages  VALUES (:field1,:field2,:field3,:field4,:field5,:field6)" withParameterDictionary:message];

请务必更改" field1"到你用于自动增量的任何领域。

答案 1 :(得分:1)

我刚看了一下我的代码,我也使用了FMDB。首先,您还必须提供insert语句的列。这就是我的工作:

NSString *sqlSL = @"INSERT INTO SmartLibrary (TITEL, SUBTITEL, PICTURE, BLURB, MARK) VALUES (?, ? ,? ,? ,?)";
[db beginTransaction];
[db executeUpdate:sqlSL, book.title, book.subtitle, book.picture, book.summary, [NSNumber numberWithInteger:book.mark]];
[db commit];

在这种情况下,我有一个结构书。因此,您需要做的是在括号中提供受此插入影响的列。您还可以看到如何制作准备好的声明,并且您应该使用事务。希望这有帮助!

答案 2 :(得分:0)

由于输入错误,我遇到了这个错误,我监督了一百次查看代码:其中一个字典键是错误的。在这种情况下,FMDB将以下错误输出到调试控制台:

Could not find index for <wrong_dict_key_name>

FMDB打印到控制台的下一个错误有点误导性:

Error: the bind count (6) is not correct for the # of variables in the query (7) (INSERT INTO ...

根本原因当然是错误的字典键。