2012-08-02 2 views
0

Не знаете, почему sqlite3_prepare_v2 равно false. Я искал в Интернете и не мог найти много, и то, что я нашел, не помогло. Один сайт предложил использовать sqlite3_errmsg (база данных), и по какой-то причине это выдало «не ошибку». Другой ответ онлайн предложил удалить папку в симуляторе iPhone, которая называется с шестнадцатеричной строкой, но это тоже не сработало. Я сделал свою базу данных и упал в папку поддерживающих файлов, чтобы она была там, и у нее есть записи.Почему sqlite3_prepare_v2 == FALSE?

Это мой код:

-(void)readMovesFromDatabaseWithPath:(NSString *)filePath 
{ 
    sqlite3 *database; 

    printf("Here in readMovesFromDatabaseWithPath\n"); 

    if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"Now in readMovesFromDatabaseWithPath\n"); 

     const char *sqlStatement = "select * from moves"; 
     sqlite3_stmt *compiledStatment; 

     printf("could not prepare statemnt: %s\n", sqlite3_errmsg(database)); //returns "not an error" 

     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatment, NULL) == SQLITE_OK) 
     { 
      NSLog(@"In sqlite3_prepare_v2 block\n"); //does not reach this line 

      while(sqlite3_step(compiledStatment) == SQLITE_ROW) //Loops through the database 
      { 
       //Extracts the move's name 
       NSString *moveName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatment, 1)]; 

       //Extracts the move's description 
       NSString *moveDescription = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatment, 2)]; 

       //Creates new move objects 
       Moves *newMove = [[Moves alloc] init]; 
       newMove.moveName = moveName; 
       newMove.moveDescription = moveDescription; 
       [self.moves addObject:newMove]; 
      } 
     } 

     sqlite3_finalize(compiledStatment); 
    } 
    sqlite3_close(database); 
} 

ответ

0

Попробуйте переставить утверждение, что выводит сообщение об ошибке в статье еще. Ваша программа расскажет вам, почему это не удается:

if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatment, NULL) == SQLITE_OK) 
    { 
     /* your code here */ 
    } 
    else 
    { 
     printf("could not prepare statemnt: %s\n", sqlite3_errmsg(database)); 
    } 

Скорее всего дело в том, что таблица moves не существует.

+1

Nvm. Я поместил некоторые строки отладки в свой код и выяснил, что путь к базе данных был пустым, но он по-прежнему равен true по сравнению с выражением SQLITE_OK. Это глупо. Проблема заключалась в том, что мне пришлось вручную разместить файл sqlite3 в папке проекта, а затем «добавить в существующий проект» через xcode. Сначала я создал базу данных на своем рабочем столе и имел проект в отдельной папке. Опция «копировать в папку» работает, но XCode по какой-то причине не признает свой путь. :/Исправлено так или иначе. Спасибо за помощь. – apples

0

Вы не присваиваете свой sqlStatement своему compiledStatment.

const char *compiledStatment = [sqlStatement UTF8String]; 

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

  • Нет связанных вопросов^_^