【问题标题】:ios fmdb load db from fileios fmdb 从文件加载数据库
【发布时间】:2012-02-12 14:41:48
【问题描述】:

我使用 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 添加到我的项目中,但此代码创建新文件而不是打开现有文件。如何加载此文件?

【问题讨论】:

    标签: ios ios4 ios5 sqlite fmdb


    【解决方案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.");
    }
    

    【讨论】:

    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多