繁体   English   中英

sqlite之类的查询导致崩溃

[英]sqlite like query causing crash

大家好,我对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; 
    }
    }

上面的代码对我来说一直有效,直到出现类似地球的字眼

如果单词包含'“” <字符,则我的方法无效。 现在我发现我们需要使用准备好的声明来解决这个问题,有人可以建议我在这种情况下如何使用准备好的声明吗?

该应用程序崩溃是因为您未转义转义字符(在本例中为单引号)。 添加此行:

[sqlQuery stringByReplacingOccurrencesOfString:@"'" withString:@"\\\\'"];

应该防止单引号引起的崩溃。 您还可以创建一个正则表达式来删除所有此类字符的转义符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM