Ios5 在xcode4中插入SQLITE3
我正在iPhone应用程序中使用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
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中是这样吗?或者还有其他更简单的方法吗?