SQLite数据库 - 无法查看更新

时间:2009-03-20 18:04:24

标签: iphone objective-c sqlite

我有一个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 个答案:

答案 0 :(得分:1)

有你的问题:

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

这不是您使用SQL的方式。相反,您应该使用SELECT word FROM words;并逐步获取每一行,只要您获得SQLITE_ROW,直到获得SQLITE_DONE。那会得到你所有的话。当你不知道新添加的单词的id时,你如何通过id找到一个单词?

答案 1 :(得分:1)

我的猜测是你在交易中。在打开和关闭例程期间必须有一些其他调用,这些调用将您的调用包装在事务中,而不会显示在代码片段中。

这就是为什么在应用程序退出之前看不到新单词的原因