1

SQLITE3在 iPhone 应用程序中用于数据库操作。

我在数据库中有 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);

}

我不知道为什么会这样。

4

1 回答 1

1

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

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

于 2012-11-02T08:36:38.143 回答