2012-08-24 6 views
11

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

- (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 "); 
    } 
} 

ответ

21

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

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

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

+0

Я могу найти журнальный стол, выполнив SQL «SELECT * FROM sqlite_master», и база данных открывается успешно, только когда дело доходит до обновления, возникает ошибка – Sunny

+1

@Sunny Если вы проверяете ее с помощью браузера SQLite или командной строки, вы можете открыть другой файл. Dump 'path' в log и query' sqlite_master' по тому же самому коду перед выполнением 'UPDATE'. – hamstergene

+0

все в порядке .. он работает сейчас :) Большое вам спасибо – Sunny

1

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

Это, как вы бы диагностировать проблемы с sqlite3 и iPhone тренажере:

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

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

+0

Странно, но из командной строки мой запрос работает, но с Objective-C это нет. Я просто добавил новую таблицу, и эта ошибка возникает. У меня даже ситуация, когда она работает иногда, и внезапно она сломана. – mr5

0

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

Смежные вопросы