Проблема с обновлением базы данных

#iphone #ios4 #sqlite

#iPhone #ios4 #sqlite

Вопрос:

Я пытаюсь обновить свою базу данных некоторыми значениями, используя следующий код. Но значения не обновляются, и в них сохраняется значение null.

 int NoOfItem = [str_NoOfitems integerValue];
int FurnitureId = [str_FurnitueId integerValue];
NSLog(@"FurnitureId %@", str_FurnitueId);
@try {
    if (sqlite3_open([[SQLDataFile getDBPath] UTF8String], amp;database) == SQLITE_OK)
    {

        if(updateStmt == nil) 
        {
            NSString *sql = [NSString stringWithFormat:@"UPDATE FurnitureSelected Set  NoOfItem = ? Where FurnitureId = %d" ,    FurnitureId];

            if(sqlite3_prepare_v2(database, [sql UTF8String], -1, amp;updateStmt, NULL) != SQLITE_OK)
            {
                NSLog(@"erroe while creating Update statement  %s",sqlite3_errmsg(database) );

            }               
        }

//      sqlite3_bind_text(updateStmt, 3, [str_NoOfitems UTF8String], -1, SQLITE_TRANSIENT);

        sqlite3_bind_int(updateStmt, 3, NoOfItem);
        if(SQLITE_DONE != sqlite3_step(updateStmt))
            NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database));



    }

}
@catch (NSException * e) {
    NSLog(@"Exception occured while Updating datbase for FurnitureSelected %@", [e description]);
}
@finally
{
    [SQLDataFile finalizeStatements];
}
  

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

Код вставки похож (это выполняется перед обновлением)

(void)InsertFurnitureValues:(NSString *)str_FurnitureId:(NSString *)str_NoOfItems:(NSString *)str_RoomId {

 int noOfItem = [str_NoOfItems integerValue];
int FId = [str_FurnitureId integerValue];
@try 
{

    if (sqlite3_open([[SQLDataFile getDBPath] UTF8String], amp;database) == SQLITE_OK)
    {

        if(addStmt == nil) 
        {
            const char *sql = "insert into FurnitureSelected(AutoId,RoomId, FurnitureId, NoOfItem) Values(?,?, ?,?)";
            if(sqlite3_prepare_v2(database, sql, -1, amp;addStmt, NULL) != SQLITE_OK)
                NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
        }

        sqlite3_bind_int(addStmt, 3, FId);//sqlite3_bind_text(addStmt, 2, [str_RoomId UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(addStmt, 2, [str_RoomId UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_int(addStmt, 4, noOfItem);//(addStmt, 4, [str_NoOfItems UTF8String], -1, SQLITE_TRANSIENT);


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


    sqlite3_reset(addStmt);

    }

}
@catch (NSException * e) 
{
    NSLog(@"Exception occure %@" , [e description]);
}
@finally 
{
    [SQLDataFile finalizeStatements];
}
  

}

Пожалуйста, помогите мне решить проблему.

Ответ №1:

Попробуйте вызвать sqlite3_finalize в подготовленном операторе.

Комментарии:

1. спасибо за ответ, но получил решение — ошибка была — sqlite3_bind_int(updateStmt, 3, NoOfItem); , нам нужно сохранить 1 вместо 3, если мы собираемся обновить только 1 значение. это была проблема.