Я пытаюсь сделать простое приложение, которое хранит и отображает карты флэш-памяти, однако у меня есть ужасное время, заставляя мой SQLite работать. Соединение с базой данных прекрасно, но когда я пробую вставку, оно разрушает и не дает признака того, что пошло не так, как надо. Это - код, который я использую для вставки карты флэш-памяти в таблицу.
const char *insert = "INSERT OR REPLACE INTO LIST (TERM, DEFINITION) VALUES (?, ?);";
sqlite3_stmt *statement;
sqlite3_prepare_v2(database, insert, -1, &statement, nil);
sqlite3_bind_text(statement, 1, [term UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [def UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
sqlite3_finalize(statement);
Я решил, что связывать текстовый метод является слабым звеном с некоторым NSLog () методы, которые я поместил ранее. В этом примере термином и определением является NSStrings, которые действительно содержат правильное значение (я знаю так много наверняка). Любая справка ценилась бы. Я не вполне освоил портативный c.
Не знаю на 100%, почему он не работает, но у меня есть несколько предложений:
Избавьтесь от ; в конце оператора insert, у меня его никогда не было.
Поместите prepare и step в оператор if, например так
if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(db));
}
if (SQLITE_DONE != sqlite3_step(statement)) {
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db));
}
Ничего из этого не поможет, но это может помочь вам понять, что не так.
И еще одна вещь, которая может помочь. Когда я работал с SQLite, было очень больно, если я вносил изменения в базу данных или вводил неправильные данные. Я потратил много времени на сброс симулятора iPhone и очистку сборки