我有一个使用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:@", "]];
感谢您的建议!
答案 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 ...
根本原因当然是错误的字典键。