FMDB——本地数据持久化浅谈

来源:互联网 发布:ps2模拟器金手指软件 编辑:程序博客网 时间:2024/05/16 07:32

最近在工作中越来越多的接触到本地数据持久化的这个需求,通过自学,看博客,大体上iOS开发里面用于本地数据存储的有NSUserDefalt、NSKeyedArchiver、CoreData、Sqlite。
对于Core Data来说 Sqlite相对于比较轻量级,所以最近一直在研究用Sqlite来做本地数据存储的需求。 提到在iOS开发中使用Sqlite就不得不提到FMDB这个第三方的类库。所以在这里 我稍微说一下FMDB这个第三方类库的使用。
首先本人比较愿意使用CocoaPods这个包管理工具,现在终端里面将FMDB install下来。
这里写图片描述
然后在Build Phases 里面添加依赖库
这里写图片描述
然后就可以开始使用FMDB进行本地数据存储的操作啦。
话不多说 上代码。
首先要在你想要进行数据存储的页面的ViewWillAppear方法里面打开数据库

- (void)viewWillAppear:(BOOL)animated {    [super viewWillAppear:animated];    // 打开数据库    [self openDataBase];}

这是函数里面的代码实现

#pragma mark - 本地数据处理- (void)openDataBase {   // 获取Document文件在沙盒中的路径     NSString *doc = [NScSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    // 新建一个plist文件名    NSString *fileName = [doc stringByAppendingPathComponent:@"LFM.sqlite"];    // 获得数据库    FMDatabase *db = [FMDatabase databaseWithPath:fileName];    // 打开数据库    if ([db open]) {//        NSLog(@"%@", @"数据库打开 OK");    }    // 创建表    BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS memo (id integer PRIMARY KEY AUTOINCREMENT, title text NOT NULL, test text, time text NOT NULL);"];    if (result) {        NSLog(@"%@",@"创建表成功");    } else {        NSLog(@"%@",@"创建表失败");    }    self.db = db;}

接着是插入你想要存储的数据

// 插入数据- (void)insertData {   NSString *title = self.titleText.text;        NSString *test = self.testView.text;        [self.db executeUpdate:@"INSERT INTO memo (title, test, time) VALUES (?,?,?);",title, test, self.currentTime];}

这样就可以了。十分简单,但是在你离开当前界面的时候别忘了关闭数据库哦。

[self.db close];

然后在读取方面呢,也很简单。
首先 还是在你想要读取数据的界面里面先打开数据库
接着:

- (void)loadLocalData {    _dataArray = [[NSMutableArray alloc] init];    // 读取数据库中的数据    FMResultSet *data = [self.db executeQuery:@"select * from memo;"];//    NSLog(@"%@", data);    while ([data next]) {        NSString *test  = [data stringForColumn:@"test"];        NSString *title = [data stringForColumn:@"title"];        NSString *time = [data stringForColumn:@"time"];        NSNumber *cid = [NSNumber numberWithInt:[data intForColumn:@"id"]];        NSMutableDictionary *infoDict = [[NSMutableDictionary alloc]init];        [infoDict setValue:title forKey:@"memoTitle"];        [infoDict setValue:test forKey:@"memoTest"];        [infoDict setValue:cid forKey:@"id"];        [infoDict setValue:time forKey:@"dateStr"];        //封装数据模型        FMMemoModel *model = [[FMMemoModel alloc] initWithDataDic:infoDict];        //将数据模型放入数组中        [_dataArray addObject:model];    }}

就这样子 就将数据取出来了 并且封装到了已经写好的Model里面 接着就可以使用了 是不是特别的简单呢?
接下来 还有几个小坑 或者说是你可能想要问的小疑问。
Q—如果如果我想更新一条数据的话 我该怎么做?
A—你需要写更新的Sql语句 而不是重新插入一条数据

NSString *title = self.titleText.text;        NSString *test = self.testView.text;        // 通过这条数据在表中的id来定位修改这条信息        [self.db executeUpdate:@"update memo set title=?,test=?,time=? where id=?;",title, test, self.currentTime, self.cid];

Q—如果我想删除一条数据呢?
A—那你需要写删除的Sql语句 也是通过id这个标识来进行删除操作
Q—如果我想在表中新加一条属性怎么办?
A—那你就需要先将整个表删掉 然后再从新建一张表,所以我建议你在建表的时候就好好考虑清楚,你都需要保存哪些属性。

以上的这些就是我对使用FMDB这个第三方类库进行数据存储的一些小的流程分析,有不明白的地方可以私信我,或者在下边评论里面提出问题。谢谢大家给个赞哦。

0 0
原创粉丝点击