Iphone 插入和更新数据完成后如何插入数据

Iphone 插入和更新数据完成后如何插入数据,iphone,sqlite,Iphone,Sqlite,我正在开发一个应用程序。在这种情况下,我面临着将数据插入数据库的问题。第一次插入和更新将执行得非常好。更新后,如果我想执行插入操作,那么应用程序将崩溃。我插入和更新的代码如下所示 +(BOOL)update:(CalendarInfo*)clInfo { NSString *query = [NSString stringWithFormat:@"UPDATE ABC set A = '%@' where B =%d and C=%d",clInfo.a,clInfo.b,clInfo.

我正在开发一个应用程序。在这种情况下,我面临着将数据插入数据库的问题。第一次插入和更新将执行得非常好。更新后,如果我想执行插入操作,那么应用程序将崩溃。我插入和更新的代码如下所示

+(BOOL)update:(CalendarInfo*)clInfo
{
    NSString *query = [NSString stringWithFormat:@"UPDATE ABC set A = '%@' where B =%d and C=%d",clInfo.a,clInfo.b,clInfo.c]; 
    sqlite3_stmt *stStatement;

    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &stStatement, nil)==SQLITE_OK)
    {
        if(SQLITE_DONE == sqlite3_step(stStatement))
            NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
        else
            NSLog(@"updation  Successful");
    }
    return 0;
}

+(BOOL)insert:(CalendarInfo*)clInfo{

    sqlite3_stmt *addStmt = nil;
    sqlite3 *contactDB;
    NSArray *docPathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *destPath = [NSString stringWithFormat:@"%@/example.sqlite",[docPathArr objectAtIndex:0]];

    if (sqlite3_open([destPath UTF8String], &contactDB)==SQLITE_OK) {
        NSString *query2 = [NSString stringWithFormat:@"INSERT  INTO ABC(C,B,A) VALUES(%d,%d,'%@')",clInfo.c,clInfo.b, clInfo.a];
        if(sqlite3_prepare_v2(database,  [query2 UTF8String], -1, &addStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }

    if(SQLITE_DONE != sqlite3_step(addStmt))
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    else
        NSLog(@"Insertion Successful");

    sqlite3_reset(addStmt);

    return 0;
}

因此,请告诉我如何解决我的问题。

从您发布的有限代码来看,我认为答案与您有两个不同的
sqlite3
实例有关。这是故意的吗

调用
sqlite3\u open([destPath UTF8String],&contactDB)

然后尝试从另一个
sqlite
实例获取错误结果:

sqlite3_errmsg(database)

使用
database
contactDB
都应该设置好。

哪一行代码实际上正在崩溃?如果(SQLITE_DONE!=sqlite3_step(addStmt))NSAssert1(0,@“插入数据时出错”。%s',sqlite3_errmsg(database));在此循环中,第二行将崩溃当它崩溃时,控制台中是否有错误?在sqlite3中,它是否会在
sqlite3\u步骤
sqlite3\u errmsg
行(我认为这是您最后一条评论的“第二行”)上崩溃?在sqlite3\u errmsg应用程序中将崩溃。错误是“在+[数据库插入]中断言失败”。如果(sqlite3\u完成!=sqlite3\u步骤(addStmt))满意。如果不满意,则问题将得到解决。