SQLite和目标C-WHERE LIKE语句错误

时间:2018-06-26 11:13:40

标签: ios sql objective-c sqlite

我正在尝试编写一个涉及WHERE LIKE语句的查询,但是我遇到了以下问题。...

当我这样写查询时:

"SELECT * FROM db WHERE name LIKE \"%%@%%\""

它被解释为:

SELECT * FROM db WHERE name LIKE "(null)"

当我查询以下内容时:

"SELECT * FROM db WHERE name LIKE \"%%%@%%\""

它被解释为:

SELECT * FROM db WHERE name LIKE "0x0p+0pple"

此:

[@"SELECT * FROM db WHERE name LIKE \"%" stringByAppendingString:name] stringByAppendingString:@"%\""]

被解释为:

SELECT * FROM db WHERE name LIKE "0x0p+0pple"

有没有办法纠正或解决此问题?

3 个答案:

答案 0 :(得分:1)

尝试这个。它将起作用。

  NSString *yourSqlQuery = [NSString stringWithFormat:@"Select * from yourTableName where name LIKE '%%%@%%'",name];

答案 1 :(得分:0)

土井! 这个:

[@"SELECT * FROM db WHERE name LIKE \"%%" stringByAppendingString:name] stringByAppendingString:@"%%\""]

被解释为:

SELECT * FROM db WHERE db LIKE "%apple%"

实际上是我要寻找的东西(起初并没有意识到),但是这种解决方法感觉有点……不必要地冗长。

答案 2 :(得分:0)

如果要使用字符串格式,则必须为:

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db WHERE name LIKE '%%%@%%'", someValue];

前两个%%变成单个%%@someValue中的任何字符串替换。最后两个%%变成单个%

query最终是:

SELECT * FROM db WHERE db LIKE '%apple%'

假设someValue是字符串@"apple"

另一方面,如果您正在使用各种SELECT * FROM函数和特定的索引号,则最好避免使用sqlite3_column_xxx,因为您无法确定返回的列的顺序是否与您的代码匹配。显式列出查询中所需的列是更安全明了。