iPhone上的sqlite删除问题

iPhone上的sqlite删除问题,iphone,database,sqlite,Iphone,Database,Sqlite,在我的iPhone应用程序中,我试图从SQLite数据库中删除一行。执行delete语句后,该行似乎被正确删除,但在重新启动应用程序后,该行仍然存在。 我正在用代码删除记录。知道有什么问题吗 NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM table1 WHERE actId=%d", actId]; char *errorMsg; if (database == nil) { NSLog(@"ERROR

在我的iPhone应用程序中,我试图从SQLite数据库中删除一行。执行delete语句后,该行似乎被正确删除,但在重新启动应用程序后,该行仍然存在。 我正在用代码删除记录。知道有什么问题吗

NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM table1 WHERE actId=%d", actId];

char *errorMsg;

if (database == nil) {
    NSLog(@"ERROR db not initialized but trying to delete record!!!");
}else{
    if (sqlite3_exec(database, [deleteSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK){
        NSAssert1(0, @"Error updating tables: %s", errorMsg);
        sqlite3_free(errorMsg);
        return NO;
    }   
}

NSLog([NSString stringWithFormat:@"DELETE Successful"]);

我已经解决了这个问题。虽然我并不完全了解所有的细节。问题是,在我的“加载代码”中,我忘记调用sqlite3_finalize来处理语句。不知道为什么,但这在某种程度上影响了将来的插入和删除。将sqlite3\u finalize添加到数据加载方法解决了问题。

您是将数据库复制到可写区域,还是尝试写入沙盒区域?另外,只是想让您知道,断言失败将终止执行路径,但UIC应用程序实际上将继续,基本上是内存泄漏。请改用NSLog或asl_log,或者确保在发布时编译出断言。数据库必须位于可写位置,因为sql语句在同一个表上工作。我是否应该以某种方式“承诺”以使更改持续?谢谢你关于这个断言的提示。@levi-那根本不是真的。iPhone使用沙盒,因此文件可以显示在可写的位置,但这些更改只发生在内存中。当应用程序终止时,设备上不会保留任何实际更改。您是在哪里创建此数据库的?但是,插入操作和删除操作怎么可能不起作用呢?当应用程序启动时,我会检查db文件是否可用,如果不可用,我会将其复制到该位置。路径由以下方法确定:-(NSString*)数据文件路径:(NSString*)文件名{NSArray*路径=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);NSString*文档Dir=[paths ObjectatinIndex:0];返回[documentsDir stringByAppendingPathComponent:fileName];}哦,我很高兴你解决了它!如果要使用准备好的语句,则必须调用sqlite3_reset()或sqlite3_finalize(),这是必须的:)如果要调用reset(),则可能存在一些缓存,如果应用程序在未调用finalize()的情况下终止,这些缓存将永远不会刷新。。。