Ошибка такой таблицы

Мне пришлось искать много сообщений об этих ошибках, но все же я не могу исправить эту проблему. Вот мой код, может ли кто-нибудь помочь мне увидеть, что происходит не так?

- (void) copyDatabaseIfNeeded {


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
   NSString *path = [documentsDirectory stringByAppendingPathComponent:@"SQL.sqlite"];

    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) 
    {
        NSLog(@"Database opened successfully");

if(updateStmt == nil) {
            NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"];
   const char *mupdate_stmt = [updStmt UTF8String]; 

if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection));
            } else {
                NSLog(@"Update successful");
            }

        }
        if(SQLITE_DONE != sqlite3_step(updateStmt))
            NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection));
        else {
            sqlite3_reset(updateStmt);
            NSLog(@"Step successful");

        }
    } 
    else 
    {
        NSLog(@"Error in opening database  ");
    }
}

Ответ 1

В SQL.sqlite нет таблицы Coffee.

SQLite молча создает файл базы данных, если он не существует. Поэтому, если у вас неправильный код path, вы открываете пустой файл базы данных, который, конечно, не содержит никаких таблиц. Убедитесь, что файл базы данных существует, и он не пуст.

Вы можете увидеть, какие таблицы есть в базе данных, выполнив SELECT * FROM sqlite_master; запрос.

Ответ 2

Одна вещь, о которой говорит мой администратор базы данных, когда у меня возникают проблемы с базой данных (в данном случае Oracle), заключается в попытке выполнить запрос с помощью инструментов командной строки.

Вот как вы могли бы диагностировать проблемы с sqlite3 и симулятором iPhone:

  • Запустите приложение в iPhone Simulator, чтобы база данных была создана/скопирована в каталоге Documents.
  • Начальный терминал
  • cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents. Лучше всего иметь только одно приложение, установленное в симуляторе, чтобы было очевидно, что такое приложение.
  • sqlite3 SQL.sqlite и попробуйте свой запрос оттуда. Вы также можете использовать команду .schema, чтобы увидеть, как выглядит схема.

Если запрос работает там, а не в вашем приложении, то вы знаете, что у вас есть ошибка, иначе у вас возникнет проблема с sqlite-запросом или сломанная схема.

Ответ 3

попробуйте переустановить приложение. Таблицы создаются во время установки приложения. Иногда это может произойти, потому что таблицы не создаются.