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这个第三方类库进行数据存储的一些小的流程分析,有不明白的地方可以私信我,或者在下边评论里面提出问题。谢谢大家给个赞哦。
- FMDB——本地数据持久化浅谈
- iOS数据持久化——FMDB应用
- 数据持久化之FMDB简单使用
- 数据持久化-CoreData、SQLite、FMDB
- FMDB&EGODatabase(数据持久化)
- 数据持久化-CoreData、SQLite、FMDB
- 数据持久化之FMDB--基本使用
- 数据持久化存储:FMDB的使用
- 浅谈数据持久化
- 浅谈数据持久化
- Snail—OC学习之本地数据持久化(plist)
- Snail—OC学习之本地数据持久化(归档)
- 持久化FMDB
- 本地存储(数据持久化)
- iOS 本地数据持久化
- 数据持久化 coredata、sqlite、fmdb和sqlitepersistentobject
- 数据持久化(三)使用第三方类库FMDB
- 数据持久化(三)使用第三方类库FMDB
- 交换机知识--网络安全介绍
- Html+CSS__margin 负值之美:负margin在页面布局中的应用
- 12 SPDY
- 文章标题
- nyoj 311 完全背包
- FMDB——本地数据持久化浅谈
- android.os.NetworkOnMainThreadException 异常处理
- 13 通过UDP广播事件
- OC的动态特性_随手笔记
- 《C语言程序设计》课后编程题选讲(ch4)
- 中断服务程序的注意点
- 购物车shopping-cart问题
- QString与char *型转换
- java.lang.RuntimeException: Can't create handler inside thread that has not cal