IOS FMDB загрузить БД из файла - PullRequest
1 голос
/ 17 января 2012

Я использую упаковщик sqlite и fmdb. Мой код для загрузки базы данных это:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"biscuit.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:path]; 

Я добавляю biscuit.sqlite в свой проект, но этот код создает новый файл, а не открывает существующий. Как я могу загрузить этот файл?

1 Ответ

2 голосов
/ 18 января 2012

Если вы хотите только читать данные из вашей базы данных, попробуйте использовать код ниже:

NSString *path = [[NSBundle mainBundle] pathForResource:@"biscuit" ofType:@"sqlite"];

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

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"biscuit.sqlite"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if (!success) {

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"biscuit.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

    if (!success) {
        NSLog(@"Failed to create writable DB. Error '%@'.", [error localizedDescription]);
    } else {
        NSLog(@"DB copied.");
    }
}else {
    NSLog(@"DB exists, no need to copy.");
}
...