如何将我的虚拟数据插入我的sqlite表 - iOS?

时间:2014-11-05 03:40:05

标签: ios objective-c sqlite

我正在尝试将虚拟数据插入到我的sqlite表中。我怎么能正确地插入这个,我做错了什么?谢谢,所有的帮助和建议表示赞赏

+(void)setAllValues {
    static sqlite3_stmt *insertStatement;
    const char *sqlInsert = "insert into session_descriptions (sessionID, sessionTitle, sessionDescription) values (1, 'Programming Title' 'Programming description')";
    if(sqlite3_prepare_v2([DBHelper getDB], sqlInsert, -1, &insertStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"Insert statement not working");
    }
    sqlite3_finalize(insertStatement);
    sqlite3_close([DBHelper getDB]);
}

1 个答案:

答案 0 :(得分:0)

有几个问题:

  1. 您正在检查sqlite3_prepare_v2是否失败,但没有费心去检查失败的原因。这是通过记录sqlite3_errmsg

    来完成的
    if (sqlite3_prepare_v2([DBHelper getDB], sqlInsert, -1, &insertStatement, NULL) != SQLITE_OK) {
        NSLog(@"prepare failed: %s", sqlite3_errmsg([DBHelper getDB]));
    }
    

    检查sqlite3_prepare_v2是否成功非常重要,如果没有,请立即记录sqlite3_errmsg,因为在准备语句期间会检测到大多数SQLite错误(如果您再进行任何操作)在检查错误消息之前调用SQLite,任何有意义的错误消息都可能被一些不那么有启发性的消息所取代。

  2. 即使准备成功,您也不会执行SQL查询。所以经过以上准备"准备"声明,你应该" step"它,为了执行它:

    if (sqlite3_step(insertStatement) != SQLITE_DONE) {
        NSLog(@"step failed: %s", sqlite3_errmsg([DBHelper getDB]));
    }
    

    sqlite3_prepare_v2之后但在sqlite3_finalize之前执行此操作。

  3. 您正在关闭数据库。这有点令人怀疑,因为您通常希望将数据库置于调用此例程时的状态。因此,我可能希望数据库不会打开,在这种情况下,此例程将打开,准备,步骤,完成,然后关闭。或者我可能希望数据库已经打开,在这种情况下,您只需准备,步骤和完成,但不要关闭数据库,使数据库保持与调用此例程时相同的状态。 / p>

    顺便说一句,我建议打开数据库一次并保持打开,只要应用程序还活着,但任何一种方法都有效。只需确保您的打开和关闭得到适当平衡。

  4. 您的INSERT语句缺少逗号。