IOS之四种数据持久化方式

一、首先来说一下五种数据持久化方式的优缺点:

1. 属性列表     :   简单易用,但是只能适用于小数据量 

2. 对象归档     :   对数据进行加密,自定义对象归档,保存的方式是序列化,只能适用于小数据量

3. NSUserDefaults :同步synchronize 应用程序内置(bundle)的一个plist文件里

4. SQLite          :    基于C语言,导入libsqlite3.dylib,(开源框架FMDB/EGODataBase)

5. Core Data     :     海量数据存储,面向对象的形式存储数据, 无需写SQL语句(开源框架MagicalRecord)


二、简单介绍一下属性列表、对象归档、NSUserDefaults的使用

1.属性列表 容器对象--->property list

   

    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/arr.plist"];

    NSArray *array = @[@1, @2, @3, @4];

    [array writeToFile:filePath

            atomically:YES];


2.对象归档 (把数据进行序列化处理 )

   

    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/arr.archiver"];

    NSDictionary *dic = @{@"name":@"Manning", @"age": @24};

    //NSKeyedArchiver 归档对象

    BOOL success = [NSKeyedArchiver archiveRootObject:dic toFile:filePath];

    if (success) {

        NSLog(@"成功");

    } 

    //解归档

    NSDictionary *undic = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];



3.NSUserDefaults 偏好设置

    NSUserDefaults支持的数据格有:

    NSNumberIntegerFloatDouble),NSStringNSDateNSArrayNSDictionaryBOOL类型

   

   

    [[NSUserDefaults standardUserDefaults] setObject:@"Lucy" forKey:@"name"];

   

    //这句话的作用为:同步,先将数据存储到应用程序内置(bundle)的一个plist文件里,

下次再从plist文件中由对应的KEY找到VALUE

    [[NSUserDefaults standardUserDefaults] synchronize];    

    NSString *str = [[NSUserDefaults standardUserDefaults] valueForKey:@"name"];

    NSLog(@"str = %@", str);


三、浅谈CoreDate

1.CoreDate简介

CoreDate用于数据持久化,适合大数据量的存储和查询,但要注意的一点是CoreDate不是数据库,而是用来管理数据库的一套框架,CoreDate可以使用数据库、XML等方式来存储数据。可以在Xcode上进行表的设计,或使用Instruments进行性能检测,可以直接生成高质量的代码。

1.CoreDate主要对象



 NSManagedObjectContext:负责应用和数据之间的交互(CRUD)

 NSPersistentStoreCoordinator:(持久化存储协调器)添加持久化存储库(如SQLite数据库),是物理数据存储的物理文件和程序之间联系的桥梁负责管理不同对象上下文

 NSManagedObjectModel:被管理的对象模型,对应定义的模型文件


 NSEntityDescription:实体描述

2.数据模型

使用CoreDataA需要一个数据模型文件来描述数据模型


3.下面是打开数据库的Demo:

- (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"沙河路径:%@",NSHomeDirectory());

    [self openDataBase];

  

}


//1.打开数据库

- (void)openDataBase

{

    //1.加载数据模型文件

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"CoreDataDemo" withExtension:@"momd"];

    //NSManagedObjectModel:用于加载数据模型文件

    NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];

    

    //2.打开模型文件对应的数据库文件

    //创建协调器对象,使用协调器管理数据库文件

    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:dataModel];

    

    //指定数据库文件在沙河中的位置

    NSString *storePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/CoreDataDemo.sqlite"];

    NSURL *storeURL = [NSURL fileURLWithPath:storePath];

    //打开一个数据文件PersistentStore --> 数据库文件

    /*

     addPersistentStoreWithType功能:

     1.如果文件不存在,创建新的数据库文件

     2.如果文件存在,直接打开这个文件

     */

    

    NSError *error = nil;

    [psc addPersistentStoreWithType:NSSQLiteStoreType //生成的数据库文件格式为SQLite


                      configuration:nil

                                URL:storeURL //数据库文件保存的路径

                            options:nil

                              error:&error];

    if (error) {

        NSLog(@"数据库文件打开失败");

    }else {

        NSLog(@"数据库打开成功");

    }

    

    //3.操作数据库

    context = [[NSManagedObjectContext alloc] init];

    //指定contex使用哪一个Coordinator来操作数据库文件

    context.persistentStoreCoordinator = psc;

    

}



4.常用方法:增删改查

4.1增加一条数据

- (void)addUser

{

  //创建一个User实体的MO对象,把MO对象添加到Context

    User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User"                  inManagedObjectContext:context];

    /*Context的作用

     相当于MO的一个容器,MO对象添加到容器中

     context通过使用coordinator来操作数据库

     MO对象和数据库文件里的数据对应

     */

    

    user.userID = @"1001";

    user.name = @"Manning";

    user.age = @24;

    

    //context中添加一个MO对象

    [context insertObject:user];

    

    //contexMO对象保存到数据库里

    BOOL result = [context save:nil];

    if (result) {

        NSLog(@"succeed");

    }else

    {

        NSLog(@"failure");

    }

}


4.2查询一条数据

- (void)queryUser

{

    //1.创建查询请求对象

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];

    

    //2.定义要查询的条件

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 20 && name LIKE 'Lu*'"];

    request.predicate = predicate;

    

    //3.context执行查询操作

    NSError *error = nil;

    NSArray *array = [context executeFetchRequest:request error:&error];

    for (User *user in array) {

        NSLog(@"查询 %@", user);

    }

}


4.3更新一条数

- (void)updateUser

{

    //1.查询出要更新的数据

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];

    request.predicate = [NSPredicate predicateWithFormat:@"userID = '4'"];

    

    NSArray *result = [context executeFetchRequest:request error:nil];

    

//    User *user = [result objectAtIndex:0];

    //2.更新数据

    for (User *user in result) {

        user.age = @23;

    }

    //3.保存更新

    [context save:nil];

}


4.4删除一条数据

- (void)deleteUser

{

    //1.查询出要更新的数据

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];

    request.predicate = [NSPredicate predicateWithFormat:@"userID = '4'"];

    

    NSArray *result = [context executeFetchRequest:request error:nil];

    

    //2.删除数据

    for (User *user in result) {

        [context deleteObject:user];

    }

    

    //3.保存

    [context save:nil];


}

四、浅谈SQLite数据库


1、SQL语句


2、DDL语句

3、DML语句

4、数据库操作流程


3、常用函数








  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值