【问题标题】:How to insert '?' (Question Mark) in SQLite Database from iPhone SDK如何插入“?” iPhone SDK 的 SQLite 数据库中的(问号)
【发布时间】:2011-07-25 20:32:23
【问题描述】:

我需要插入一个 NSString,其中包含 '?' (问号),在 sqlite 数据库中。当我尝试执行[database executeNonQuery:query] 时,应用程序崩溃:

代码如下:

NSString *question = [NSString stringWithFormat:@"How are you?"];
NSString *query = [NSString stringWithFormat:@"insert into sometable (questions) values ('%@') ",question];

[database executeNonQuery:query];

如果我传递其他可以正常工作的值,但只有包含“?”的字符串没有插入。

请帮帮我。

【问题讨论】:

    标签: iphone objective-c cocoa-touch sqlite ios4


    【解决方案1】:

    ?是要替换的值的占位符。您不应该使用 stringWithFormat 在数据库中插入项目,而是使用占位符。我不知道您使用的是什么数据库库,但大多数库都允许您使用这样的准备好的查询:

    [database executeQuery:@"insert into sometable (questions) values (?)", question];
    

    question 将被自动转义并保存您的问号。这也保护了 ' 字符。您应该自己尝试一下,将问题修改为“您不高兴我没有说香蕉吗?”。您的查询可能会崩溃,因为生成的 SQL 将无效。

    【讨论】:

    • 感谢您的回复。我试着把'?而不是 '%@' 但它再次崩溃。对于 '(单引号),我将其替换为 ''(2 个单引号)。但我没有找到 ?(问号)的转义字符。有什么想法吗?
    • 您使用的是什么数据库库? EGODatabase, fmdb?
    • 我正在为 SQLite 数据库使用 sqlite3 和 libsqlite3.dylib 框架。
    • 是的,但您正在调用 [database executeNonQuery]。什么是数据库对象?它是您创建的自定义类吗?
    • 如果是自己写的类,修改为使用prepare,绑定参数使用sqlite3_bind
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多