ios-数据存储三(CoreData)

1、CoreData
简介:CoreData是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。CoreData是一门功能强大的数据持久化技术,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互,如果让我选我还是选SQLite不要问我为什么用coreData做过数据库升级或版本更新添加新字段时的都懂,不过还是记录一下吧以前还以为自己写过才发现没写过关于coreData的文档。

用法:
1)搭建上下文环境
// 从应用程序包中加载模型文件
1 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
2 // 传入模型对象,初始化NSPersistentStoreCoordinator
3 NSPersistentStoreCoordinator *psc = [[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model] autorelease];
4 // 构建SQLite数据库文件的路径
5 NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
6 NSURL *url = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@”person.data”]];
7 // 添加持久化存储库,这里使用SQLite作为存储库
8 NSError *error = nil;
9 NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
10 if (store == nil) { // 直接抛异常
11 [NSException raise:@”添加数据库错误” format:@”%@”, [error localizedDescription]];
12 }
13 // 初始化上下文,设置persistentStoreCoordinator属性
14 NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
15 context.persistentStoreCoordinator = psc;

2)添加数据到数据库
1 // 传入上下文,创建一个Person实体对象
2 NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@”Person” inManagedObjectContext:context];
3 // 设置Person的简单属性
4 [person setValue:@”MJ” forKey:@”name”];
5 [person setValue:[NSNumber numberWithInt:27] forKey:@”age”];
6 // 传入上下文,创建一个Card实体对象
7 NSManagedObject *card = [NSEntityDescription insertNewObjectForEntityForName:@”Card” inManagedObjectContext:context];
8 [card setValue:@”4414241933432” forKey:@”no”];
9 // 设置Person和Card之间的关联关系
10 [person setValue:card forKey:@”card”];
11 // 利用上下文对象,将数据同步到持久化存储库
12 NSError *error = nil;
13 BOOL success = [context save:&error];
14 if (!success) {
15 [NSException raise:@”访问数据库错误” format:@”%@”, [error localizedDescription]];
16 }
17 // 如果是想做更新操作:只要在更改了实体对象的属性后调用[context save:&error],就能将更改的数据同步到数据库

3)从数据库中查询数据
1 // 初始化一个查询请求
2 NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
3 // 设置要查询的实体
4 request.entity = [NSEntityDescription entityForName:@”Person” inManagedObjectContext:context];
5 // 设置排序(按照age降序)
6 NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@”age” ascending:NO];
7 request.sortDescriptors = [NSArray arrayWithObject:sort];
8 // 设置条件过滤(搜索name中包含字符串”Itcast-1”的记录,注意:设置条件过滤时,数据库SQL语句中的%要用来代替,所以%Itcast-1%应该写成*Itcast-1)
9 NSPredicate predicate = [NSPredicate predicateWithFormat:@”name like %@”, @”*Itcast-1“];
10 request.predicate = predicate;
11 // 执行请求
12 NSError *error = nil;
13 NSArray *objs = [context executeFetchRequest:request error:&error];
14 if (error) {
15 [NSException raise:@”查询错误” format:@”%@”, [error localizedDescription]];
16 }
17 // 遍历数据
18 for (NSManagedObject *obj in objs) {
19 NSLog(@”name=%@”, [obj valueForKey:@”name”]
20 }

4)删除数据库中的数据
1 // 传入需要删除的实体对象
2 [context deleteObject:managedObject];
3 // 将结果同步到数据库
4 NSError *error = nil;
5 [context save:&error];
6 if (error) {
7 [NSException raise:@”删除错误” format:@”%@”, [error localizedDescription]];
8 }

2、MagicalRecord的用法
在Cocoa中存在一种技术叫CoreData,用来对数据进行持久化,类似于Java世界中的Hibernate。在新建Cocoa Application/iOS Application的向导中,有一个选项是要不要使用Core Data,当启用以后你会发现在AppDelegate.m中添加了大量与Core Data相关的代码,但是你对大部分代码不知所以然。
MagicalRecord的出现在一定程度上缓解了这个问题,降低了CoreData的使用门槛。MagicalRecord借用了Ruby on Rails中的Active Record模式,使得你可以非常容易的添加、查找、删除数据。

1)在AppDelegate.m中添加以下代码对Magical Record进行初始化
在- (void)applicationDidFinishLaunching:(NSNotification *)aNotification中写上
1 [MagicalRecord setupCoreDataStackWithStoreNamed:@”MyDatabase.sqlite”];
在-(void)applicationWillTerminate:(NSNotification *)aNotication中写上
[MagicalRecord cleanUp];

2)查询记录
使用Person的MR_findAll、MR_findAllSortedBy、MR_findByAttribute等方法可以查询Person:
//查找数据库中的所有Person。
NSArray *persons = [Person MR_findAll];

//查找所有的Person并按照first name排序。
NSArray *personsSorted = [Person MR_findAllSortedBy:@“age” ascending:YES];

 //查找所有age属性为25的Person记录。
    NSArray *personsAgeEuqals25   = [Person MR_findByAttribute:@"age" withValue:[NSNumber numberWithInt:25]];

 //查找数据库中的第一条记录

Person *person = [Person MR_findFirst];

3)添加记录
使用Person的MR_createEntity方法可以方便的创建一个Person,需要使用[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]来进行保存哦:
//创建新数据
Person *person = [Person MR_createEntity];

4)更新记录
直接对找到的Person进行赋值,然后使用NSManagedObjectContext保存即可更新Person:

5)删除记录
使用Person的MR_deleteEntity可以方便的删除Person,模式和添加更新一致:
[person MR_deleteEntity];

6)保存数据
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值