【问题标题】:Create database file if not exist如果不存在则创建数据库文件
【发布时间】:2012-05-29 10:20:36
【问题描述】:

我正在尝试在第一个应用程序启动时创建数据库文件。使用 FMDB 库。为此,我正在检查数据库文件是否已经存在,如果不存在,我想从项目中复制数据库文件。 我的代码:

-(void)checkAndCreateDatabase {
NSLog(@"check and create database doing");
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *dbFileName = [docDir stringByAppendingPathComponent:@"FriendsDatabase.sqlite3"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

if (![fileManager fileExistsAtPath:dbFileName]) {
    [fileManager copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"FriendsDatabase" ofType:@"sqlite3"] toPath:dbFileName error:&error];
    NSLog(@"database created");
} else {
    NSLog(@"fail to create database");
}

FMDatabase  *_db = [[FMDatabase alloc] initWithPath: dbFileName];
if (![_db open]) {
    [_db release];
    NSLog(@"Could't open DB");
    }
_db.logsErrors = NO;

self.db = _db;
[_db release];
}

但我有一个错误:'NSInvalidArgumentException', reason: '*** -[NSFileManager copyItemAtPath:toPath:error:]: source path is nil'。我做错了什么?

【问题讨论】:

    标签: objective-c ios sqlite fmdb


    【解决方案1】:

    您的主包中似乎没有名为“FriendsDatabase.sqlite3”的文件。 (如果你有一个,你对-copyItemAtPath:toPath:error: 的调用中的源路径就不会是零。)

    尝试将您的代码更改为如下所示:

    NSString *path = [[NSBundle mainBundle] pathForResource:@"FriendsDatabase" ofType:@"sqlite3"];
    [fileManager copyItemAtPath:path toPath:dbFileName error:&error];
    

    然后使用调试器单步执行代码并检查path 的值。

    请注意,您已将“FriendsDatabase”(注意“s”)指定为代码中的文件名,但您的注释将文件称为“FriendDatabase”。也许您只是在代码中拼错了文件名——这是使用常量的好理由!

    【讨论】:

    • 不可能。我在我的项目中添加了“FriendDatabase.sqlite3”。我检查了,/myProject/ 目录中的数据库文件在哪里。
    【解决方案2】:

    Caleb 的回答是正确的,但我要补充一点,您必须确保 sqlite3 文件是您的目标的成员。在 XCode 中,选择您的 sqlite3 文件,然后在“Target Membership”下打开“File Inspector”面板(右侧面板)。确保您的目标应用已被选中。

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2013-03-26
      • 2019-03-06
      相关资源
      最近更新 更多