Оператор обновления SQLite выполняется без ошибок, но строка таблицы не обновляется?

#iphone #sqlite

#iPhone #sqlite

Вопрос:

Я не могу понять, что это может быть? Любой совет? Спасибо

 (void)setRegId: (NSInteger) _regId

{

NSInteger r_id = _regId;
NSInteger row = 1;

ret = sqlite3_open(dbName, amp;database);
if (ret != SQLITE_OK)
{
    printf("Error opening the db: %sn", sqlite3_errmsg(database));
    sqlite3_close(database);
    return;
}

sqlite3_stmt *compiledStatement = nil;
if (compiledStatement == nil) {
    const char *sql = "UPDATE RegDB Set id = ? Where rowindex = ?";

    if (sqlite3_prepare_v2(database, sql, -1, amp;compiledStatement, NULL) != SQLITE_OK) 
    {
        NSLog(@"Error: failed to prepare compiledStatement with message '%s'.",sqlite3_errmsg(database));
        return;
    }
}

sqlite3_bind_int(compiledStatement, 1, r_id);
sqlite3_bind_int(compiledStatement, 2, row);

int success = sqlite3_step(compiledStatement);
if (success == SQLITE_ERROR){
    NSLog(@"Error: failed to update compiledStatement with message '%s'.", sqlite3_errmsg(database));
}

sqlite3_finalize(compiledStatement);

if(sqlite3_close(database) != SQLITE_OK)
{
    NSLog(@"Error: failed to closed DB with message     '%s'.",sqlite3_errmsg(database));
    }

        }
  

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

1. возможно ли, что вы сохраняете обновление, но затем перезаписываете файл .db при следующей сборке?

2. im на устройстве. Я думаю, что это близко к проблеме, потому что тот же код отлично работает в отдельном проекте. Я несколько раз запускаю метод обновления во время работы приложения на устройстве, когда я читаю содержимое базы данных, они всегда являются значениями по умолчанию, установленными в БД. Спасибо за ваш совет.

Ответ №1:

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

Попробуйте записать свой окончательный оператор (или, по крайней мере, переменные r_id и row ). Используйте sqlite3 или SQLiteManager с Firefox для проверки изменений в базе данных.