【问题标题】:Objective-c FMDB SQLite insert withParameterDictionary and auto-increment keyObjective-c FMDB SQLite 插入带有参数字典和自动增量键
【发布时间】:2013-02-09 05:21:18
【问题描述】:

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

感谢您的建议!

【问题讨论】:

  • 我想您有一个自动递增的 ID 列。您不必为此列提供任何内容,因为它是由数据库自动插入的。
  • 如果我在值部分省略 :primarykey,我会收到错误:表消息有 7 列,但提供了 6 个值;如果我为 pk 发送一个 nil 对象,则会收到错误错误:绑定计数 (6) 对于查询中的变量数 (7) 不正确;如果我使用 @"" 作为主键,我会得到“数据类型不匹配”,因为主键是整数。
  • 你看到我的回答了吗?对你有帮助吗?

标签: objective-c sqlite fmdb


【解决方案1】:

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

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

然后

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

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

【讨论】:

  • 不。您不需要/不得指定自动增量字段。
【解决方案2】:

我刚刚查看了我也使用 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];

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

【讨论】:

    【解决方案3】:

    我之所以收到此错误,是因为我监督查看代码一百次:其中一个字典键错误。在这种情况下,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 ...
    

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

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 2018-06-24
      • 2019-09-09
      • 2021-11-19
      • 2014-05-28
      • 2015-12-15
      • 2013-04-18
      • 2012-01-05
      相关资源
      最近更新 更多