不要急,不要怕

FMDB存取字典

写在前面:

ios 中常用的有以下几种方式
1、XML属性列表(plist)归档
2、Preference(偏好设置)NSuserDefault
3、NSKeyedArchiver归档(NSCoding)
4、SQLite3
5、Core Data
我在开发中最常用的就是2,4了,2可以存储一些字符串什么的,而4可以存一些稍大的数据。虽然苹果官方推荐CoreData,并且好多人都说他好用,但是研究了一下感觉又不方便有重,(可能没用习惯吧)数据如果不是太多的话没有必要用,再说coreData也是基于sqlit3。
第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,使用简单安全.

存储字典:

  • (BOOL)executeUpdate:(NSString*)sql, …可以看到这个方法存储的是字符串,但是在开发中如果我们需要存储字典和字符串怎么办?
    两种方法:
    • (BOOL)executeUpdate:(NSString)sql withParameterDictionary:(NSDictionary )arguments,有一个这个函数,但是抱歉整了两个小时没整出来,丢人…有时间再说,,待续
      另一种就比较简单了(一开始看不上这个方法,但最后还是用的它)
      在存储时讲字典转化为Json字符串:
      NSDictionary dic = vc.jumpBaseInfo;
      NSError
      parseError = nil;
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
      vc.collectionStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

然后存进数据库:
[_lock lock];
NSString *sql = @”insert into QXNNews (loadUrl,detailID,collectionStr) values (?,?,?)”;

BOOL isSuccess = [_fmdb executeUpdate:sql,vc.loadUrl,vc.detailID,vc.collectionStr];

[_lock unlock];

在读取时:
//再将json字符串转化为字典:
NSData *jsonData = [vc.collectionStr dataUsingEncoding:NSUTF8StringEncoding];

NSError *err;
//得到字典
vc.jumpBaseInfo = [NSJSONSerialization JSONObjectWithData:jsonData

options:NSJSONReadingMutableContainers

error:&err];

总结:

数据库博大精深,FMDB就是好用。