• iOS 之数据持久化


    一:iOS 中存储数据的方法

         用户配置(NSUserDefault),plist,归档(NSKeyedArichiver), 写入磁盘, 数据库(sqlite/coreData)     

    二: 数据持久化之数据库

     1. sqlite    第三方库:FMDB(下载链接)     

            1》建库                

                   NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)  lastObject];                

                   //该文件路径无需真实存在,如果不存在会自动创建             

                  //路径为@“”:表示会在临时目录创建一个空的数据库,当FMDatabase连接关闭时,文件也会被删除

                  //路径为NULL:将创建一个内在数据库,同样的,当FMDatabase连接关闭时,数据将会被销毁          

                 NSString *fileName = [doc stringByAppendingPathComponent:@"student.sqlite"];            

                 FMDatabase *db = [FMDatabase databaseWithPath:fileName];

            2》打开库            

                      [db open]

            3》建表           

                 BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS myAir (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, type text NOT NULL);"];

           4》添加数据       

                     BOOL b= [db executeUpdateWithFormat:@"insert into myAir (name,type) values (%@,%@);",name,name];

                     往数据库中添加了数据时候可使用火狐浏览器安装SQLite Manager 查看sqlite 文件的数据:  https://addons.mozilla.org/zh-cn/firefox/addon/sqlite-manager/

           5》删除                   

                     BOOL b=[db executeUpdateWithFormat:@"delete from myAir where id = %d;",1];

           6》修改

                     BOOL b= [db executeUpdate:@"update myAir set name = ? where id = ?",@"M999",@"1"];

           7》查询并读取数据           

               //查询整个表的数据

                    FMResultSet *resultSet = [db executeQuery:@"select * from myAir;"];

              //按条件模糊查询

                   FMResultSet *resultSet2 = [db executeQuery:[NSString stringWithFormat:@"select * from myAir where name like '%%%@%%';",@"5"]];

               注意: 模糊查询 like '% 5%'    在oc 中 打印% 需要两个 %%

              //读取数据              

                while ([resultSet  next]){

                    NSString *name = [resultSet  objectForColumn:@"name"];

                   [_dataList addObject:name];

                  } 

           8》关闭数据库            

                 [db close];

        2. coreData   第三方库:  MagicalRecord(下载链接使用详情

           1》添加            

                 [对象  MR_createEntity] 

           2》删除           

                 [对象名 MR_deleteEntity];

           3》查询

              a: 查找所有 : [对象 MR_findAll];

              b:根据条件查询:

                    b1 :使用谓词  NSPredicate                   

                       如: NSPredicate *pre=[NSPredicate predicateWithFormat:@"name  CONTAINS %@",@"5"];

                         ENDSWITH 表示以什么结尾;BEGINSWITH 表示以什么开头;CONTAINS  表示是否包含指定字符或字符串;LIKE 模糊查找   *  代表0个或多个字符,?代表一个字符;MATCHES  匹配正则表达式

                          [对象 MR_findAllWithPredicate:pre ];                

                          [对象 MR_ascendingSortDescriptors:要排序的数组名];  //对某数组进行排序

                   b2: 根据实体属性名对应的值进行查找

                       如:[对象 MR_findByAttribute:@"name" withValue:@"张三"];   //将对象中 name=张三的人找出来                        

                             NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];   //对name 属性进行排序  ascending:yes  递增  递减  

                  b3: 对多个列进行排序                     

                NSArray *result = [Note findAllSortedBy:@"date:NO,name" ascending:YES];          //表示 date 字段降序,name字段升序。

           4》修改

                   //先查找出要修改的对象再进行修改                         

                       NSPredicate *pre=[NSPredicate predicateWithFormat:@"id = %@",@"1"];              

                       NSArray *obj= [Person MR_findAllWithPredicate:pre ];                   

                       for (Person *p in obj) {

                            p.name=@"other";

                       }

           5》注意: 除了查询之外  ,对实体进行操作了之后,都要加上以下语句         

                   [[NSManagedObjectContext MR_defaultContext]MR_saveToPersistentStoreAndWait];

           6》MagicalRecord 中NSpredicate的使用和延伸:   http://blog.csdn.net/sinat_25544827/article/details/45956169

           7》数据库的迁移

        3. sqlite  与coreData 的比较

              sqlite: 需要使用sql语句,使用起来比较麻烦,代码量较大。

              coreData:操作简单,容易理解。         

  • 相关阅读:
    python学习笔记(29)-操作excel
    python学习笔记(28)-unittest单元测试-执行用例
    python学习笔记(27)-unittest单元测试-测试用例
    python学习笔记(26)-request模块
    python学习笔记(25)-继承
    c++ 流基本概念
    友元函数、类和运算符重载
    c++中的引用
    c++重点知识点
    指针和结构体
  • 原文地址:https://www.cnblogs.com/Cyan-zoey/p/7283456.html
Copyright © 2020-2023  润新知