2013-03-20 2 views
2

Я пытаюсь извлечь данные из базы данных sqlite. Я добавил файл «libsqlite3.0.dylib» и скопировал созданную SQL-версию в папку приложения. Я создал два метода в файле appdelegate. ОниВ Sqlite iOS нет таблицы

//To copy DB 
- (void) copyDatabaseIfNeeded { 

    //Using NSFileManager we can perform many file system operations. 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    NSString *dbPath = [self getDBPath]; 
    BOOL success = [fileManager fileExistsAtPath:dbPath]; 

    if(!success) { 
     NSLog(@"DB File %@ does not exists", dbPath); 
     NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"tms.sqlite"]; 
     success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

     NSLog(@"Successfully copied db file to path %@", dbPath); 
     if (!success) 
      NSLog(@"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
    } else { 
     NSLog(@"DB File %@ already exists", dbPath); 
    } 
} 

//To get DB path 
-(NSString *)getDBPath{ 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDir=[paths objectAtIndex:0]; 
    return [documentDir stringByAppendingPathComponent:@"sampleDB.sqlite"]; 
} 

я назвал copyDatabaseIfNeeded() в didFinishLaunchingWithOptions и я добавил один метод в ViewController.m файле. То есть

-(void)Display 
{ 
    SqlitAppDelegate *appDelegate=(SqlitAppDelegate *)[UIApplication sharedApplication].delegate; 
    NSString *dbPath=[appDelegate getDBPath]; 
    if (sqlite3_open([dbPath UTF8String], &myDB) == SQLITE_OK) 
    { 
     NSLog(@"Database opned successflly"); 
     const char *sql = "select * from sampleTable"; 
     NSLog(@"%s",sql); 
     sqlite3_stmt *selectstmt; 
     if(sqlite3_prepare_v2(myDB, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
      NSLog(@"Prepared successfully"); 
     else 
     { 
      NSLog(@"Preparation failed"); 
      NSLog(@"%s",sqlite3_errmsg(myDB)); 
      NSLog(@"%d",sqlite3_errcode(myDB)); 
     } 


    } 
    else 
     NSLog(@"Couldn't open database"); 


} 

Я назвал этот метод методом didViewLoad.

Я получаю follwing выход:

  • 2013-03-20 12: 02: 24,026 SqliteSample2 [951: 11303] База данных opned successflly
  • 2013-03-20 12: 02: 24,027 SqliteSample2 [ 951: 11303] выберите * от sampleTable
  • 2013-03-20 12: 02: 24,028 SqliteSample2 [951: 11303] Получение удалось
  • 2013-03-20 12: 02: 24,029 SqliteSample2 [951: 11303] нет такого таблица: sampleTable
  • 2013-03-20 12: 02: 24.029 SqliteSam ple2 [951: 11303] 1

Кто-нибудь скажет, что я делаю ??????

Спасибо заранее ...........

+3

Удалено ли существующее приложение с устройства/симулятора? Новые изменения в базе данных будут отображаться только при установке новой сборки. Функция копирования базы данных будет иметь только новую копию, если файл не существует. –

+0

Одним словом, удалите приложение с устройства/симулятора, очистите и перестройте проект и запустите на устройстве/симуляторе. – Raptor

+0

Сделайте одно дело с dbPath вручную и проверьте, есть ли какая-либо база данных, созданная или нет. Если вы не копируете созданную базу данных вручную и не проверяете –

ответ

0

Импорт SqlitAppDelegate в контроллере представления и сделать объект как SqlitAppDelegate *app после @implementation ViewController

В viewDidLoad записи

app= (SqlitAppDelegate *)[[UIApplication sharedApplication]delegate]; 

    databasepath = [app getDBPath]; 

    if(sqlite3_open([databasepath UTF8String], &dbAssessor) == SQLITE_OK) 
    { 
     NSString *sql = [NSString stringWithFormat:@"select * from SampleTable ;"]; 

     sqlite3_stmt *selectstmt; 
     const char *sel_query=[sql UTF8String]; 

     if(sqlite3_prepare(dbAssessor, sel_query, -1, &selectstmt, NULL) == SQLITE_OK) 
     { 
      while(sqlite3_step(selectstmt) == SQLITE_ROW) 
      { 
       NSLog(@"Prepared Successfully..."); 
      } 
     } 
     sqlite3_finalize(selectstmt); 
    } 
    else 
     sqlite3_close(dbAssessor); 

Пробуйте этот код и передайте мне результат. Наслаждаться !!!

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