iOS开发——数据存储法则

Stack Overflow上的一种数据存储法则:

  • 若数据完全匹配内存且相对非结构化,则使用plist
  • 若数据完全匹配内存且具有树状结构,则使用XML
  • 若数据与内存不匹配且具有图形结构,同时应用不需要额外的查询能力,则使用Core Data
  • 如果数据与内存不匹配且具有复杂结构,或应用需要关系数据库提供的强查询能力,则使用sqlite
  • 如果数据必须保密(例如密码),则使用keychain。

下面列了一些数据存储方面的库

  • FMDB

FMDB以OC的方式封装了SQLite的C语言API

ccgus/fmdb:fmdb - 围绕SQLite建立的Cocoa / Objective-C的wrapper

如果你在项目中使用SQLite,此wrapper库会使你的工作变简单。

  • SSFKeychain

soffes/sskeychain:sskeychain - 简单的Objective-C wrapper,Mac和iOS上的keychain可以使用

要在应用中存储敏感数据,你必须时刻使用keychain。这个库可以简化使用keychain数据存储的过程。

  • Magical Record

MagicalRecord - 轻松管理Core Data

Core data非常难于管理。而这个库可以让你舒爽地管理Core Data。

realm的使用博客

一.coredata

新建项目可勾选coredata,会自动生成XX.xcdatamodeldeld.可以在这里添加属性和表之间的关系,生成属性文件的时候会自动写好属性。
也可以在没有勾选的情况下新建生成。

  • 1.创建上下文对象:

      NSManagedObjectContext *managedObjectContext = ManagedObjectContext;
    

    2.获得实体

     Person *person = [NSEntityDescription insertNewObjectForEntityForName:[Person entityName] inManagedObjectContext:managedObjectContext];
    

    3.实体对象赋值

     person.time = @"2016年六月二十三";
    

    4.存储

     NSError *error = nil;
     NSLog(@"%@",[managedObjectContext save:&error]?@"数据存储成功":error.localizedDescription); 
    
  • [managedObjectContext deleteObject:person];
    [managedObjectContext save:&error];
    
  • 查,改

    1.查询要修改的文件、对象、对象属性

    NSFetchRequest *requset = [NSFetchRequest fetchRequestWithEntityName:[Person entityName]];
    
    NSArray *datas = [managedObjectContext executeFetchRequest:requset error:nil];
    
    request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"time" ascending:NO]];//排序:
    

    2.更改值:

     for (Person *person in datas) {
       if ([person isEqual:self.person]) {
           person.time =@"6:20";
           }
     }
    

    3.存储

      [managedObjectContext save:nil];
    

    -
    配置查询请求,条件查询= 关系运算符 Contanins

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"time > %d",2];
     request.predicate = predicate;

二.FMDB

查询出来结果是以字典的方式,传值是传字典数据更加方便

  NSString *updateSql = [NSString stringWithFormat:@"UPDATE %@ SET %@ = '%@' , %@ = '%@' , %@ = '%@' WHERE %@ = %@", @"user", @"state",  state ,@"time", time,@"thing",thing,@"id",idStr]; 

  [db executeUpdate:updateSql];                                                                                                                                                       
  • BOOL isdelete= [db executeUpdate:@"delete from user where id = ?",idStr];
    

三.realm


  • /*
    // 查询指定的 Realm 数据库
    RLMRealm *petsRealm = [RLMRealm realmWithPath:@”pets.realm”]; // 获得一个指定的 Realm 数据库
    RLMResults *otherDogs = [Dog allObjectsInRealm:petsRealm]; // 从该 Realm 数据库中,检索所有狗狗

    条件查询:
     1 断言查询:
     RLMResults *tanDogs = [Dog objectsWhere:@"color = '棕黄色' AND name BEGINSWITH '大'"];
     2.使用 NSPredicate 查询
     NSPredicate *pred = [NSPredicate predicateWithFormat:@"color = %@ AND name BEGINSWITH %@",
     @"棕黄色", @"大"];
     RLMResults *tanDogs = [Dog objectsWithPredicate:pred];
     3..链式查询
     RLMResults *tanDogs = [Dog objectsWhere:@"color = '棕黄色'"];
     RLMResults *tanDogsWithBNames = [tanDogs objectsWhere:@"name BEGINSWITH '大'"];
    
     */
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值