我在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.
答案 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
)。
执行此操作后,尝试从目标路径打开数据库,我认为它会起作用!