应该在哪里关闭sqlite的连接 - iOS应用
问题描述:
我的iOS应用的上线应该在哪里关闭sqlite的连接 - iOS应用
sqlite3_exec(database, "COMMIT", 0, 0, 0);
下面是完整的功能终止。
-(void)clearCarts
{
sqlite3_exec(database, "BEGIN", 0, 0, 0);
sqlite3_stmt *stmt = nil;
const char *sql = "DELETE FROM carts";
if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database));
if (SQLITE_DONE != sqlite3_step(stmt))
NSAssert1(0, @"Error:'%s'", sqlite3_errmsg(database));
sqlite3_reset(stmt);
sqlite3_finalize(stmt);
sqlite3_exec(database, "COMMIT", 0, 0, 0);// terminates here
}
可能是什么原因,并在那里我应该使用sqlite3_close(database)
作为sqlite3_close(database)
未在任何功能中使用。 请高级建议,谢谢。
答
这必须是因为您没有打开数据库来执行查询,并且应该在执行语句后使用sqlite3_close(database)
。
尝试用下面的代码
sqlite3 *database;
sqlite3_stmt *selectstmt;
if (sqlite3_open([yourDatabasePath UTF8String], &database) == SQLITE_OK)
{
NSString *sql = [NSString stringWithFormat:@"DELETE FROM carts"];
const char *insert_stmt = [sql UTF8String];
sqlite3_prepare_v2(database,insert_stmt, -1, &selectstmt, NULL);
if(sqlite3_step(selectstmt)==SQLITE_DONE)
{
NSLog(@"Delete successfully");
}
else
{
NSLog(@"Error while Clean Database. '%s'", sqlite3_errmsg(database));
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
谢谢你的答案。实际上数据库正在以另一种功能打开,如下所示: ' - (id)initContent:(NSString *)source {0} {0} {0} self = [super init]; int ret = sqlite3_open([source UTF8String],&database); if(ret!= SQLITE_OK) { sqlite3_close(database); NSLog(@“error opening database!error =%i”,ret); } return self; }' – Yas
您的欢迎:) –
任何其他建议请:)我对这一切都很新,需要修改一个iOS应用程序。应用程序并没有终止此声明中的所有时间,有时它可以正常工作,有时终止。不知道为什么它是这样的.. – Yas