嗨,我对ios中的sqlite不太了解。我正在使用查询来搜索单词/句子。以下是我检索记录的示例代码
-(NSArray *)prepareSearchResultsForQuery:(NSString *)searchString{
searchQueryString = searchString;
sqlite3_stmt *searchResultsStmt;
NSMutableArray *arrayOfSearchResults;
NSString *searchResultsQuery = [NSString stringWithFormat:@"SELECT * FROM Search WHERE pageText LIKE '%%%@%%'",searchString];
if (sqlite3_prepare_v2(bookDB,[searchResultsQuery UTF8String],-1,&searchResultsStmt,nil) == SQLITE_OK) {
arrayOfSearchResults = [[NSMutableArray alloc]initWithCapacity:1];
while (sqlite3_step(searchResultsStmt) == SQLITE_ROW) {
XPathSearchResult *xpathObj = [[XPathSearchResult alloc] init];
xpathObj.targetPageIndex = sqlite3_column_int(searchResultsStmt, 2);
NSString *entirePageString = [[[NSString alloc] initWithUTF8String:(const char*)sqlite3_column_text(searchResultsStmt, 4)] autorelease];
xpathObj.stringContainingSearchQuery = [self getDisplayStringFromPageString:entirePageString];
[arrayOfSearchResults addObject:xpathObj];
[xpathObj release];
}
}
sqlite3_finalize(searchResultsStmt);
return arrayOfSearchResults;
}
}
以上代码对我有用,直到有这就是地球的
这样的词语如果单词包含'“”<我的方法不起作用。现在我发现我们需要使用准备好的声明来解决这个问题。任何人都可以建议我如何在这种情况下使用预备声明。谢谢提前
答案 0 :(得分:0)
该应用程序崩溃,因为您有未转义的转义字符(在本例中为单引号)。 添加此行:
[sqlQuery stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
应该可以防止由单引号引起的崩溃。您还可以创建一个正则表达式来删除所有这些字符的转义。