0

我有一个使用 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:@", "]];

谢谢你的建议!

4

3 回答 3

3

您没有指定哪一列是自动增量列,所以我假设它只是“field1”。当你建立你的字典时,添加这个:

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

然后

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

请务必将“field1”更改为您用于自动增量的任何字段。

于 2014-05-16T04:18:47.003 回答
1

我刚刚查看了我也使用 FMDB 的代码。首先,您还必须提供插入语句的列。这就是我所做的:

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];

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

于 2013-02-23T19:44:34.377 回答
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 ...

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

于 2020-12-02T07:20:53.330 回答