IOS FMDB загрузить БД из файла
Я использую 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 ответ
Решение
Если вы хотите только читать данные из вашей базы данных, попробуйте использовать код ниже:
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.");
}