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:操作简单,容易理解。         

posted @ 2017-08-04 09:58  青语  阅读(259)  评论(0编辑  收藏  举报