База данных SQLite3 на самом деле не вставляет данные - iPhone

Я пытаюсь добавить новую запись в свою базу данных, но она не работает. Нет никаких ошибок, брошенных, и код, который, как предполагается, выполняется после того, как выполнения вставки, означая нет никаких ошибок с запросом. Но тем не менее, ничто не добавляется к базе данных. Я попробовал и подготовленные операторы и более простой sqlite3_exec, и это - тот же результат.

Я знаю, что моя база данных загружается, потому что информация для tableview (и последующий tableviews) загружается из базы данных. Соединение не является проблемой.

Кроме того, журнал sqlite3_last_insert_rowid (дб) возвращает корректное число для следующей строки. Но тем не менее, информация не сохранена.

Вот мой код:

db = [Database openDatabase];           
NSString *query = [NSString stringWithFormat:@"INSERT INTO lists (name) VALUES('%@')", newField.text];
NSLog(@"Query: %@",query);

sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
  if (sqlite3_step(statement) == SQLITE_DONE){
    NSLog(@"You created a new list!");
    int newListId = sqlite3_last_insert_rowid(db);
    MyList *newList = [[MyList alloc] initWithName:newField.text idNumber:[NSNumber numberWithInt:newListId]];
    [self.listArray addObject:newList];
    [newList release];
    [self.tableView reloadData];
    sqlite3_finalize(statement);
  }
  else {
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db));
  }
}
[Database closeDatabase:db];

Снова, никакие ошибки не были брошены. Готовить и операторы шага возвращают SQLITE_OK и SQLITE_DONE соответственно, все же ничего не происходит.

Любая справка ценится!

5
задан kiamlaluno 15 July 2010 в 04:21
поделиться

1 ответ

Вы должны зафиксировать транзакцию после вставки с помощью оператора COMMIT;.

0
ответ дан 14 December 2019 в 13:29
поделиться