Проблема чтения кодировки одинарных кавычек из sqlite для iPhone - PullRequest
2 голосов
/ 02 декабря 2010

Я создал базу данных 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;
}

1 Ответ

0 голосов
/ 04 декабря 2010

Я исправил это.Кажется, что когда я обновлял базу данных, я не удалял старую из симулятора, поэтому он все время тестировал со старыми данными.Глупая ошибка!Так что нет проблем с чтением в одинарных кавычках из SQLite (возможно, поэтому я никогда не мог найти информацию об этом).Спасибо тем, кто прочитал и попытался помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...