как вставить данные после завершения вставки и обновления данных - PullRequest
0 голосов
/ 11 января 2012

Я разрабатываю одно приложение.В этом я столкнулся с проблемой при вставке данных в базу данных.Первая вставка и обновление будут выполнены очень хорошо.После обновления, если я хочу выполнить операцию вставки, приложение будет сбой.Мой код для вставки и обновления был похож на

+(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;
}

Так что, пожалуйста, скажите мне, как решить мою проблему.

1 Ответ

0 голосов
/ 11 января 2012

Из ограниченного кода, который вы разместили, я думаю, что ответ связан с тем, что у вас есть два различных sqlite3 экземпляра здесь.Было ли это преднамеренным?

Вы звоните sqlite3_open([destPath UTF8String], &contactDB);

, а затем пытаетесь получить результат ошибки из другого sqlite экземпляра:

sqlite3_errmsg(database)

Либо используйте databaseили contactDB и все должно быть готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...