在哪里应关闭SQLite连接-IOS应用



我的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);

最新更新