2013-03-29 4 views
0

Я всегда использую этот код, чтобы открыть sqlite db в моем приложении iPhone, но теперь с iOS6 этот код не работает. Функция: sqlite3_prepare_v2 терпит неудачу, но я не понимаю, почему!iOS 6: SQLite db не работает

Я также не понимаю, почему, если я попытаюсь изменить имя: «gamer.sqlite» sqlite db с другим именем несуществующего файла, функция: «sqlite3_open» снова возвращает значение SQLITE_OK.

Это мой код:

-(NSMutableArray*)view_table 
{ 
    const char *sql; 

    NSMutableArray *content=[[NSMutableArray alloc] initWithObjects:nil]; 
    [self msgbox:@"eseguo"]; 
    /*elementi da visualizzare nella tabella*/ 
    if(sqlite3_open([databasePath UTF8String],&database)==SQLITE_OK) 
    { 
      [self msgbox:@"opened"]; 
     sql = "SELECT * FROM list_gamer"; 
     if (sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL) == SQLITE_OK) 
     { 
       [self msgbox:@"query eseguita"]; 
      while(sqlite3_step(selectstmt) == SQLITE_ROW) 
      { 
       [content addObject:[NSString stringWithFormat:@"%s",sqlite3_column_text(selectstmt,0)]]; 
      } 
     } 
    } 

    return content; 

} 


- (void)viewDidLoad{ 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    databasePath = [[documentsDir stringByAppendingPathComponent:@"gamer.sqlite"] copy]; 

    if(![[NSFileManager defaultManager] fileExistsAtPath:databasePath]) 
    { 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     int success = [fileManager fileExistsAtPath:databasePath]; 
     if(success) 
     { 
      [fileManager removeItemAtPath:databasePath error:nil]; 
      return; 
     } 

     NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"gamer.sqlite"]; 

     // Copy the database from the package to the users filesystem 
     [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; 


     documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     documentsDir = [documentPaths objectAtIndex:0]; 
    } 

[super viewDidLoad]; 
} 

- (void)didReceiveMemoryWarning{ 
    [super didReceiveMemoryWarning]; 

} 

-(IBAction)start_game:(id)sender{ 
    self.view=frmgame; 
    [self view_table]; 
} 
+0

Вы должны получить ошибку из базы данных. Добавьте 'else', который обрабатывает сбой инструкции подготовки. Используйте 'sqlite3_errmsg' для получения ошибки, а затем запишите сообщение об ошибке. – rmaddy

ответ

0

Не совсем прямой ответ, но я лично очень люблю использовать fmbd, чтобы помочь управлять SQLite & ошибку.

Fmdb является Objective-C оберткой SQLite: http://sqlite.org/

https://github.com/ccgus/fmdb

+0

Я прочитал ссылку на эту оболочку sqlite, это очень просто. Я думаю использовать его. –

+0

Благодарим за ответ. – Franck

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