Ios5 在xcode4中插入SQLITE3

Ios5 在xcode4中插入SQLITE3,ios5,xcode4,sqlite,Ios5,Xcode4,Sqlite,我正在iPhone应用程序中使用SQLITE3进行数据库操作 数据库中有2个表,我想在不同的情况下插入到2个表中 我的问题是第一次插入操作工作正常。如果我尝试将值的get insert插入到另一个表中,则该值将插入到上次插入的表中 表1的代码是: -(void)addToTable1 { if(addStmt == nil) { const char *sql = "insert into Table(T1_Name) Values(?)"; if(s

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

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

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

表1的代码是:

-(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);

}

我不知道它发生的原因。

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


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

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


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

+1最好还是将语句句柄保留在方法的本地。我在AppDelegate.m中使用了sqlite3\u finalize,它将在插入后立即执行。我发现问题是因为rowID=sqlite3\u last\u insert\u rowID(数据库);所以用新文件插入到表2中是这样吗?或者还有其他更简单的方法吗?+1最好还是将语句句柄保持在方法的本地。我在AppDelegate.m中使用了sqlite3\u finalize,它将在插入后立即执行。我发现问题的原因是rowID=sqlite3\u last\u insert\u rowID(数据库);所以用新文件插入到表2中是这样吗?或者还有其他更简单的方法吗?