Я создал базу данных SQLite для iPhone, чтобы хранить мои данные (строки).У меня есть некоторые данные, которые содержат «одинарные кавычки (т.е. не напрягайтесь).Это было вставлено в БД с помощью обычного экранирования для SQLite.
INSERT INTO todo(test) VALUES('don''t be tense');
Когда я делаю выборку в терминале, я вижу одинарную кавычку в записи.
don't be tense
Моя проблема в том, что когда я читаю запись, в NSLog нет одинарной кавычки:
dont be tense
Это вызов для чтения в поле:
self.text = [NSString stringWIthUTF8String:(char *)sqlite3_column_text(init_statement, 1)];
NSLog(@"%@",self.translation);
Я был бы очень признателен за помощь в том, как убедиться, что цитата читается.
Ниже приводится полныйкод, если это поможет:
static sqlite3_stmt *init_statement = nil;
@implementation Todo
@synthesize primaryKey,text;
- (id)initWithPrimaryKey:(NSInteger)pk database:(sqlite3 *)db {
if (self = [super init]) {
primaryKey = pk;
database = db;
// Compile the query for retrieving book data. See insertNewBookIntoDatabase: for more detail.
if (init_statement == nil) {
// Note the '?' at the end of the query. This is a parameter which can be replaced by a bound variable.
// This is a great way to optimize because frequently used queries can be compiled once, then with each
// use new variable values can be bound to placeholders.
const char *sql = "SELECT text FROM todo WHERE pk=?";
if (sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}
// For this query, we bind the primary key to the first (and only) placeholder in the statement.
// Note that the parameters are numbered from 1, not from 0.
sqlite3_bind_int(init_statement, 1, primaryKey);
if (sqlite3_step(init_statement) == SQLITE_ROW) {
self.text = [NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];
NSLog(@"%@",self.text);
} else {
self.text = @"Nothing";
}
// Reset the statement for future reuse.
sqlite3_reset(init_statement);
}
return self;
}