我在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);
}
我不知道为什么会发生这种情况。
答案 0 :(得分:1)
释放后,您必须将addStmt
重置为nil
,否则if(addStmt == nil)
检查将阻止使用新语句。
此外,在关闭数据库之前,您必须使用sqlite3_finalize
,而不是sqlite3_reset
。