在xcode4中插入SQLITE3

时间:2012-11-02 05:40:19

标签: ios5 xcode4 sqlite

我在iPhone应用程序中使用SQLITE3进行数据库操作。

我在数据库中有2个表,我想在不同情况下插入2个表。

我的问题是第一次插入操作正常。如果我尝试插入另一个表,则将值插入到最后插入的表中。

我的Table1代码是:

-(void)addToTable1

{

    if(addStmt == nil) {
        const char *sql = "insert into Table(T1_Name) Values(?)";
        if(sqlite3_prepare_v2(database, sqlCurrency, -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }

    sqlite3_bind_text(addStmt, 1, [T1_Name UTF8String], -1, SQLITE_TRANSIENT);

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

    sqlite3_reset(addStmt);
    sqlite3_close(database);
} 

表2的代码是:

-(void)addToTable2
{
    if(addStmt == nil) {
        const char *sql = "insert into Table2(T2_Name) Values(?)";
        if(sqlite3_prepare_v2(database, sqlWeight, -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }
    sqlite3_bind_text(addStmt, 1, [T2_Name UTF8String], -1, SQLITE_TRANSIENT);

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

    sqlite3_reset(addStmt);
    sqlite3_close(database);

}

我不知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

释放后,您必须将addStmt重置为nil,否则if(addStmt == nil)检查将阻止使用新语句。

此外,在关闭数据库之前,您必须使用sqlite3_finalize,而不是sqlite3_reset