iOS数据库操作之coredata详细操作步骤
iOS应用数据存取的常用方式
? XML属性列表 -- PList
? NSKeyedArchiver 归档 ?Preference(偏好设置) ? SQLite3
? Core Data
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
Core Data简介
? Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象 的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效 地通过面向对象的接口管理数据
? Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转 化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的 数据还原成OC对象
? 在数据操作过程中,无需编写任何SQL语句
? 要使用Core Data,需要导入CoreData框架
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_51f5318789c29267fc9a3418e910d02e.png)
模型文件及实体(Entity)
? 要使用CodeData,首先需要定义模型文件,描述应用程
序中的所有实体(Entities)? 所谓实体,是跟数据库进行映射的对象
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_963e6548bb30309548c4aabfcd401e44.png)
NSManagedObject--对应数据库中的一条记录
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_78c6b04a9e2fbf59c2fb1c07280b43d7.jpg)
Core Data主要对象关系示意图 类似于数据库的句柄,handle,用来操纵数据库
持久化存储调度者,是数据库与对象之间的
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_7898a93d5ecb51d8234f3d2af38660b3.png)
在开发中,只会用到一次,如果不理解,直接粘代码
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_84499dead0b8bfab5eba33ed8bf37d70.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_b16a9b2b1121557cccd36ca5a14d498d.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
Core Data主要对象
? NSManagedObjectContext:负责应用和数据库之间的交互(CRUD)
? NSPersistentStoreCoordinator:添加持久化存储库(如SQLite数据 库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管 理不同对象上下文
? NSManagedObjectModel:被管理的对象模型 ?NSEntityDescription:实体描述
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
打开数据库
// 1. 实例化持久化的存储
// 1.1 从Bundle中加载被管理的数据模型
NSManagedObjectModel *model = [NSManagedObjectModelmergedModelFromBundles:nil];
// 1.2 实例化持久化存储调度
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
...
// 1.3 添加持久化存储(SQLite)
[store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:url options:nil
error:&error];
...
// 管理对象上下文 _context = [[NSManagedObjectContext alloc]init]; _context.persistentStoreCoordinator = store;
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_1f5f8ccc70996bc6d7196436bc9229ee.png)
新增记录
Person *p = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:_context];
p.name = @"张三"; p.age = @18;
[_context save:nil];
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
查询数据--NSFetchedResultsControllerNSManagedObjectContext *context = [[DataManagersharedDataManager] sharedContext];
NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
// 定义查询排序 NSSortDescriptor *sort = [NSSortDescriptorsortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = @[sort];
// 定义查询结果控制器 _fetchedResultController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
managedObjectContext:context sectionNameKeyPath:nilcacheName:nil]; ...
[_fetchedResultController performFetch:&error];
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
查询数据
NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
request.predicate = [NSPredicatepredicateWithFormat:@"%K LIKE ‘*52*‘ OR name CONTAINS ‘三‘", @"phoneNo"];
NSArray *array = [_contextexecuteFetchRequest:request error:nil];
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
更新&删除记录
1. 找到要更新、删除的记录 2. 更新:修改对象属性3. 删除:上下文删除对象 4. 上下文保存
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
Core Data的调试
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_ebc77c57a9af92fafd29a48f7f91f897.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_35e1d3a92b3da70a508e9424752595b4.png)
技术博客http://www.cnblogs.com/ChenYilong/
新浪微博http://weibo.com/luohanchenyilong
? XML属性列表 -- PList
? NSKeyedArchiver 归档 ?Preference(偏好设置) ? SQLite3
? Core Data
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
Core Data简介
? Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象 的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效 地通过面向对象的接口管理数据
? Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转 化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的 数据还原成OC对象
? 在数据操作过程中,无需编写任何SQL语句
? 要使用Core Data,需要导入CoreData框架
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_51f5318789c29267fc9a3418e910d02e.png)
模型文件及实体(Entity)
? 要使用CodeData,首先需要定义模型文件,描述应用程
序中的所有实体(Entities)? 所谓实体,是跟数据库进行映射的对象
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_963e6548bb30309548c4aabfcd401e44.png)
NSManagedObject--对应数据库中的一条记录
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_78c6b04a9e2fbf59c2fb1c07280b43d7.jpg)
Core Data主要对象关系示意图 类似于数据库的句柄,handle,用来操纵数据库
持久化存储调度者,是数据库与对象之间的
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_05eeca2cd15c616a36b9d3b4bd17b704.jpg)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_7898a93d5ecb51d8234f3d2af38660b3.png)
在开发中,只会用到一次,如果不理解,直接粘代码
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_84499dead0b8bfab5eba33ed8bf37d70.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_b16a9b2b1121557cccd36ca5a14d498d.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
Core Data主要对象
? NSManagedObjectContext:负责应用和数据库之间的交互(CRUD)
? NSPersistentStoreCoordinator:添加持久化存储库(如SQLite数据 库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管 理不同对象上下文
? NSManagedObjectModel:被管理的对象模型 ?NSEntityDescription:实体描述
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
打开数据库
// 1. 实例化持久化的存储
// 1.1 从Bundle中加载被管理的数据模型
NSManagedObjectModel *model = [NSManagedObjectModelmergedModelFromBundles:nil];
// 1.2 实例化持久化存储调度
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
...
// 1.3 添加持久化存储(SQLite)
[store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:url options:nil
error:&error];
...
// 管理对象上下文 _context = [[NSManagedObjectContext alloc]init]; _context.persistentStoreCoordinator = store;
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_1f5f8ccc70996bc6d7196436bc9229ee.png)
新增记录
Person *p = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:_context];
p.name = @"张三"; p.age = @18;
[_context save:nil];
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
查询数据--NSFetchedResultsControllerNSManagedObjectContext *context = [[DataManagersharedDataManager] sharedContext];
NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
// 定义查询排序 NSSortDescriptor *sort = [NSSortDescriptorsortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = @[sort];
// 定义查询结果控制器 _fetchedResultController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
managedObjectContext:context sectionNameKeyPath:nilcacheName:nil]; ...
[_fetchedResultController performFetch:&error];
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
查询数据
NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
request.predicate = [NSPredicatepredicateWithFormat:@"%K LIKE ‘*52*‘ OR name CONTAINS ‘三‘", @"phoneNo"];
NSArray *array = [_contextexecuteFetchRequest:request error:nil];
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
更新&删除记录
1. 找到要更新、删除的记录 2. 更新:修改对象属性3. 删除:上下文删除对象 4. 上下文保存
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_897b223fe1bf63457e55de6d396ff5bb.png)
Core Data的调试
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_ebc77c57a9af92fafd29a48f7f91f897.png)
![bubuko.com,布布扣](http://postachio-images.s3-website-us-east-1.amazonaws.com/96083b7bb56878d8f4821117b754ca3a/8025f62ec245ed8fdcc41a592a4ca1a1/w600_35e1d3a92b3da70a508e9424752595b4.png)
技术博客http://www.cnblogs.com/ChenYilong/
新浪微博http://weibo.com/luohanchenyilong
下面是iOS数据库操作之coredata详细操作步骤:附上pdf文档和示例程序:
CoreData
1. 常用类和方法 (注意需要导入 coredata 框架 )
表结构:NSEntityDescription
表记录:NSManagedObject 数据库存放方式:NSPersistentStoreCoordinator(持久化存储协调者)
数据库操作:NSManagedObjectContext(被管理的对象上下文)
2. xcode 图形管理
2. 3.
4.
2.操作数据库
一.连接数据库
- 首先需要创建一个操作数据库的上下文。NSManagedObjectContext
- 操作数据库的上下文需要设置一个调度者属性,这个调度者是用来将图形化
建立的模型和数据库联系起来。
- 给调度者添加一个需要联系的数据库。
二.添加,更新,删除
添加:
1. 新建实体 INST (插入) 2. 设置实体的属性
3. 保存上下文
更新:
1. 判断是否已有一模一样的模型 2. 设置实体属性
3. 保存上下文
删除
三.查询
1.使用 NSFetchedResultsController 控制器
2.1 当操作数据上下文的内容改变的时候,会自动调用抓取结果控制器的代理方 法
3.
注意:一定要执行抓取请求,返回的数据在 sections 里,这个数组中装的都是遵 守 NSFetchedResultsSectionInfo
这个协议的对象。通过
numberOfObjects 就能获取一组有多少数据对象了。
1. 建立数据模型DataModel
* Entity - Entities(实体)
暂时理解为数据库中的表,在定义数据模型时,第一步就要定义实体
*
Attributes(属性)
暂时理解为数据库中的字段
2. 建立NSManagedObject(被管理的对象)
以上操作全部用鼠标就可以完成(属性名字除外)
在数据模型最终确立之前,person.h&person.m中的内容都是自动生成的,不需要修改其中代码。
NSManagedObject的内容是通过图形化的界面确定实体的属性之后,自动生成的。
@dynamic 编译器会动态生成getter&setter方法,提高程序的扩展度。
FetechedResultController执行查询后,返回遵守了
NSFetchedResultsSectionInfo协议的对象的数组
除了安全,设计公司高级机密的,可以使用静态库
.a
.framework
对于iOS程序员,如果将自己的代码包在.a,会形成依赖!
查询工具网:http://blog.csdn.net/ajrm0925/article/details/7410978 比较好的文档:http://www.tuicool.com/articles/3mmIZnhttp://blog.csdn.net/jiangshurunhe/article/details/10304309
coredata第三方框架,附上官方示例程序:
数据库工具_CoreData_MagicalRecord-develop