База данных SQLite - не может видеть обновления - PullRequest
1 голос
/ 20 марта 2009

У меня есть база данных sqlite, и я добавляю в нее новые слова. Проблема в том, что я вижу их добавленными в таблицу только после перезапуска приложения. Оператор «SELECT» не «видит» вновь добавленные элементы перед перезапуском приложения.

Почему это может произойти?

Я создаю какой-то словарь. Вот как я могу добавить новые предметы:

const char *sql_query = "INSERT INTO words(word) VALUES(?)";
        if(sqlite3_prepare_v2(database, sql_query, -1, &addWordsStmt, NULL) != SQLITE_OK)
        {
            return FALSE;
        }

sqlite3_bind_text(addWordsStmt, 1, [ word UTF8String], -1, SQLITE_TRANSIENT);

    if( sqlite3_step(addWordsStmt) != SQLITE_DONE)
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));

sqlite3_reset(addWordsStmt);


sqlite3_finalize(addWordsStmt);

А вот и мой поисковый код:

const char *sql_query = "SELECT word FROM words WHERE id=?";

        if(sqlite3_prepare_v2(database, sql_query, -1, &getWordsStmt, NULL) != SQLITE_OK) 
        {
            return;
        }

sqlite3_bind_int(getWordsStmt, 1, wordid);

    if( sqlite3_step(getWordsStmt) != SQLITE_ROW)
    {
        NSLog(@"Error while getting data. '%s'", sqlite3_errmsg(database));
        sqlite3_reset(getWordsStmt);
        return;
    }

    NSString *word = [NSString stringWithUTF8String:(char *)sqlite3_column_text(getWordsStmt, 0)];

sqlite3_reset(getWordsStmt);

sqlite3_finalize(getWordsStmt);

Ответы [ 2 ]

1 голос
/ 27 января 2011

Я предполагаю, что вы находитесь в транзакции. Во время подпрограмм открытия и закрытия должны быть некоторые другие вызовы, которые обертывают ваши вызовы в транзакции и не отображаются во фрагментах кода.

Вот почему вы не видите новые слова, пока ваше приложение не закроется

1 голос
/ 20 марта 2009

Вот твоя проблема:

const char *sql_query = "SELECT word FROM words WHERE id=?";

Это не то, как вы используете SQL. Вместо этого вы должны использовать SELECT word FROM words; и шагать, чтобы получить каждый ряд, пока вы получаете SQLITE_ROW, пока не получите SQLITE_DONE. Это даст вам все ваши слова. Как вы собираетесь найти слово по идентификатору, если вы не знаете идентификатор вновь добавленных слов?

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