iOS 之數據持久化

一:iOS 中存儲數據的方法

     用戶配置(NSUserDefault),plist,歸檔(NSKeyedArichiver), 寫入磁盤, 數據庫(sqlite/coreData)     git

二: 數據持久化之數據庫

 1. sqlite    第三方庫:FMDB(下載連接)     

        1》建庫                github

               NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)  lastObject];                正則表達式

               //該文件路徑無需真實存在,若是不存在會自動建立             sql

              //路徑爲@「」:表示會在臨時目錄建立一個空的數據庫,當FMDatabase鏈接關閉時,文件也會被刪除數據庫

              //路徑爲NULL:將建立一個內在數據庫,一樣的,當FMDatabase鏈接關閉時,數據將會被銷燬          數組

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

             FMDatabase *db = [FMDatabase databaseWithPath:fileName];spa

        2》打開庫            .net

                  [db open]firefox

        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:操做簡單,容易理解。         

相關文章
相關標籤/搜索