是否可以搜索具有 base64 编码的一些文本字符串的 SQLite 数据库?
Is it possible to search SQLite database that has base64-encoded some text strings?
我知道你可以像这样查询数据库
NSString *strSelectQuery = [NSString stringWithFormat: @"SELECT * FROM Songs WHERE songname LIKE '%%%@%%'", str];
但是,问题是我在将数据存储到我的 sqlite 数据库之前对字符串 (base64) 进行了编码。因此,在这种情况下,搜索栏中的常规搜索将不起作用。我有另一种解决方案,可以获取所有数据并将其存储在一个数组中,然后我可以预测它。但是,我想知道是否有一种方法可以使用上面的查询以某种方式搜索数据,即使字符串是由 base64 编码的。
在 chat with you 中,很明显之前的开发人员在将值插入数据库时遇到问题,因此他选择对这些字符串进行 base64 编码。
最重要的是,在 base64 字符串中搜索子字符串在技术上是可行的,但出奇地复杂且效率极低。我不建议尝试这样做。
相反,我根本不会对数据库中的字符串进行 base64 编码。数据库会更小(base64编码的字符串比原来的payload大33%),代码会更简单,搜索也毫不费力。
您提到在尝试将文本值插入数据库时遇到错误。这是因为使用 stringWithFormat
构建 SQL 会导致问题。考虑:
NSString *sql = [NSString stringWithFormat: @"INSERT INTO book (title) VALUES ('%@')", title];
BOOL success = [db executeUpdate:sql]; // FMDB method
但如果标题包含撇号,那将失败:
Finnegan's Wake
是的,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];
我知道你可以像这样查询数据库
NSString *strSelectQuery = [NSString stringWithFormat: @"SELECT * FROM Songs WHERE songname LIKE '%%%@%%'", str];
但是,问题是我在将数据存储到我的 sqlite 数据库之前对字符串 (base64) 进行了编码。因此,在这种情况下,搜索栏中的常规搜索将不起作用。我有另一种解决方案,可以获取所有数据并将其存储在一个数组中,然后我可以预测它。但是,我想知道是否有一种方法可以使用上面的查询以某种方式搜索数据,即使字符串是由 base64 编码的。
在 chat with you 中,很明显之前的开发人员在将值插入数据库时遇到问题,因此他选择对这些字符串进行 base64 编码。
最重要的是,在 base64 字符串中搜索子字符串在技术上是可行的,但出奇地复杂且效率极低。我不建议尝试这样做。
相反,我根本不会对数据库中的字符串进行 base64 编码。数据库会更小(base64编码的字符串比原来的payload大33%),代码会更简单,搜索也毫不费力。
您提到在尝试将文本值插入数据库时遇到错误。这是因为使用 stringWithFormat
构建 SQL 会导致问题。考虑:
NSString *sql = [NSString stringWithFormat: @"INSERT INTO book (title) VALUES ('%@')", title];
BOOL success = [db executeUpdate:sql]; // FMDB method
但如果标题包含撇号,那将失败:
Finnegan's Wake
是的,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];