Ошибка такой таблицы
Мне пришлось искать много сообщений об этих ошибках, но все же я не могу исправить эту проблему. Вот мой код, может ли кто-нибудь помочь мне увидеть, что происходит не так?
- (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
попробуйте переустановить приложение. Таблицы создаются во время установки приложения. Иногда это может произойти, потому что таблицы не создаются.