项目目录中的SQLite文件,使用fmdb打开它失败

时间:2016-08-01 11:30:51

标签: ios sqlite fmdb

我在SQLite Manager中创建了一个表格并将其导出到桌面,其名称为db_fo_dic.sqlite,我可以打开db_fo_dic.sqlite使用SQLite Manager,因此我复制{ {1}}在我的Xcode项目目录中,我尝试按db_fo_dic.sqlite打开sqlite文件,但它失败了:

FMDB

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

结果信息是: FMDatabase *db = [FMDatabase databaseWithPath:path];

这是我的sqlite的位置路径: 2016-08-01 19:22:34.955 test_sqlite[15380:425242] The FMDatabase <FMDatabase: 0x7ff589c38f10> is not open.

2 个答案:

答案 0 :(得分:1)

8小时后,我找到了解决问题的方法。

#import "FMDatabaseQueue.h"

static FMDatabaseQueue *_queue;
- (void)viewDidLoad中的

_queue = [FMDatabaseQueue databaseQueueWithPath:path];

我可以查询我的数据库:

[_queue inDatabase:^(FMDatabase *db) {

        FMResultSet *result = [db executeQuery:@"select * from dic_content limit 10;"];

        while ([result next]) {

            NSString *str = [result stringForColumn:@"tit"];

            NSLog(@"%@",str);
        }

    }];

我使用此方法替换以前的方法。

答案 1 :(得分:0)

您对app app中存储的内容没有写入权限。因此,您必须先将数据库复制到文档目录。有关iOS中文件系统权限的更多详细信息,请参阅Apple documentation for file system

所以你可以做点什么,

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    self.documentsDirectory = [paths objectAtIndex:0];

    self.databaseFilename = dbFilename;

 NSString* destinationPath = [self.documentsDirectory stringByAppendingPathComponent:self.databaseFilename];
if (![[NSFileManager defaultManager]fileExistsAtPath:destinationPath]) {
    NSString *sourcePath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:self.databaseFilename];
    NSError *error;
    [[NSFileManager defaultManager]copyItemAtPath:sourcePath toPath:destinationPath error:&error];

    if (error != nil) {

        NSLog(@"%@",[error localizedDescription]);
    }

}

此处dbFilename是您的数据库名称(在您的情况下为db_fo_dic.sqlite)。

执行此操作后,尝试从目标路径打开数据库,我认为它会起作用!