Как уже говорили другие, используйте синтаксис %%
в stringWithFormat
, чтобы в строке поиска появился буквальный знак процента.Но не делайте этого с вашим SQL.Делайте это только со значением.Следует избегать использования stringWithFormat
для вставки текстовых значений непосредственно в SQL.Вместо этого, используя ?
заполнители в SQL:
NSString *value = [NSString stringWithFormat:@"%@%%", textbox1.text];
NSString *query = @"Select category from categorytable where category like ?";
Затем подготовьте sqlite3_stmt
, используя query
и затем sqlite3_bind_text
с value
.Например:
sqlite3_stmt *statement;
int rc;
if ((rc = sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, NULL)) != SQLITE_OK) {
NSLog(@"%s (%ld)", sqlite3_errmsg(db), (long)rc);
} else {
if ((rc = sqlite3_bind_text(statement, 1, [value UTF8String], -1, SQLITE_TRANSIENT)) != SQLITE_OK) {
NSLog(@"%s (%ld)", sqlite3_errmsg(db), (long)rc);
}
while ((rc = sqlite3_step(statement)) == SQLITE_ROW) {
const unsigned char *string = sqlite3_column_text(statement, 0);
NSLog(@"%s", string);
}
if (rc != SQLITE_DONE) {
NSLog(@"%s (%ld)", sqlite3_errmsg(db), (long)rc);
}
sqlite3_finalize(statement);
}
Или, если используется FMDB:
FMResultSet *rs = [db executeQuery:query, value];
NSAssert(rs, @"%@", [db lastErrorMessage]);
while ([rs next]) {
NSLog(@"%@", [rs resultDictionary]);
}
[rs close];
Это важно для предотвращения проблем, связанных с появлением символов '
внутри значения (например, еслиВы ищете "Бар и гриль Боба").