我知道你可以像这样查询数据库
NSString *strSelectQuery = [NSString stringWithFormat: @"SELECT * FROM Songs WHERE songname LIKE '%%%@%%'", str];
然而,问题是我在将数据存储到我的sqlite数据库之前编码了字符串(base64)。因此,搜索栏中的定期搜索在这种情况下无法正常工作。我有另一个解决方案,抓取所有数据并将其存储在一个数组,然后我可以预测它。但是,我想知道是否有办法使用上面的查询以某种方式搜索数据,即使字符串是由base64编码的。
答案 0 :(得分:0)
在chat with you中,很明显前一个开发人员在将值插入数据库时遇到了问题,因此他选择对这些字符串进行base64编码。
底线,在base64字符串中搜索子字符串在技术上是可行的,但令人惊讶的复杂且非常低效。我不建议尝试这样做。
相反,我根本不会对数据库中的字符串进行64位编码。数据库将更小(base64编码的字符串比原始有效负载大33%),代码将更简单,搜索现在可以毫不费力地工作。
您提到在尝试将文本值插入数据库时遇到错误。这是因为使用stringWithFormat
构建SQL可能会导致问题。考虑:
NSString *sql = [NSString stringWithFormat: @"INSERT INTO book (title) VALUES ('%@')", title];
BOOL success = [db executeUpdate:sql]; // FMDB method
但如果标题包含撇号,则会失败:
芬尼根的醒来
是的,base64编码可以解决这个问题,但更好的是,你可以用SQL替换?
占位符:
NSString *sql = @"INSERT INTO book (title) VALUES (?)";
BOOL success = [db executeUpdate:sql, title];
顺便说一下,要搜索,您还想使用?
占位符:
NSString *sql = @"SELECT * FROM book WHERE title LIKE ?";
NSString *searchTerm = [NSString stringWithFormat:@"%%%@%%", searchString];
FMResultSet *rs = [db executeQuery:sql, searchTerm];