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

最近在工作中越来越多的接触到本地数据持久化的这个需求,通过自学,看博客,大体上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这个第三方类库进行数据存储的一些小的流程分析,有不明白的地方可以私信我,或者在下边评论里面提出问题。谢谢大家给个赞哦。

你可能感兴趣的:(iOS地图开发,本地数据存储)