2014-11-19 2 views
-1

Мне нужно прочитать локальный файл sqlite, который на моем iPad мне не нужен, просто как его открыть, отправную точку. Я загрузил файл с FTP-сервера и нашел его в своем приложении.Прочтите локальный файл sqlite

+0

Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких абзацах. – l0gg3r

+0

Кстати, [FMDB] (https://github.com/ccgus/fmdb) может упростить программирование SQLite Objective-C, а не использовать [API-интерфейс SQLite C] (https://www.sqlite.org/ c3ref/intro.html). – Rob

ответ

1

Открытие и закрытие базы данных SQLite не так уж сложно. Вам просто нужно выполнить следующие шаги:

Шаг 1 - скопируйте базу данных из своего пакета в папку документов вашего приложения.

Вы не хотите, чтобы возиться с пакетом версии базы данных, вы хотите использовать конкретный экземпляр для этого устройства.

//******************************************* 
- (void)copyDatabaseToDocumentsFolder { 
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *localDatabase = [documentsPath stringByAppendingPathComponent: @"YourDatabaseFileName.sql"]; 
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath: localDatabase]; 

    if (fileExists == NO) { 
     NSError *err; 

     // Get the path to the database in the application package 
     NSString *databaseInAppBundle = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"YourDatabaseFileName.sql"]; 

     // Copy the file from the package to the users filesystem 
     if (![[NSFileManager defaultManager] copyItemAtPath: databaseInAppBundle toPath: localDatabase error: &err]) { 
      NSLog(@"Database copy failed: %@", [err description]); 
     } 
    } 
} 

Шаг 2: - создать Ивар для базы данных.

@interface YourClass() { 
    sqlite3 *localDB; 
} 

@end 

Шаг 3 - открывать и закрывать при необходимости.

//******************************************* 
- (void)closeDatabase { 
    if (localDB != nil) { 
     sqlite3_close(localDB); 
     localDB = nil; 
    } 
} 

//******************************************* 
- (void)openDatabase { 
    if (localDB == nil) { 
     NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
     char *dbpath = (char *)[[documentsPath stringByAppendingPathComponent: @"YourDatabaseFileName.sql"] UTF8String]; 
     sqlite3_open(dbpath, &localDB); 
    } 
} 
+0

Что такое dbpath? – Dim

+0

Извините, плохая копия и вставка. Я обновил код выше. – Axeva

+0

Похоже, что у [OP есть проблемы] (http://stackoverflow.com/questions/27041238/open-db-in-documents-folder) с помощью метода 'openDatabase', который я ожидаю вернуть' BOOL' в указывают на успех. Возможно, стоит обновить код. – trojanfoe

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