iOS数据库操作之coredata详细操作步骤
iOS
应用数据存取的常用方式
• XML 属性列表 -- PList
• NSKeyedArchiver 归档 • Preference (偏好设置) • SQLite3
• Core Data
Core Data 简介
• Core Data 是 iOS SDK 里的一个很强大的框架,允许程序员 以面向对象 的方式储存和管理数据 。使用 Core Data 框架,程序员可以很轻松有效 地通过面向对象的接口管理数据
• Core Data 框架提供了 对象 - 关系映射 (ORM) 的功能,即能够将 OC 对象转 化成数据,保存在 SQLite3 数据库文件中,也能够将保存在数据库中的 数据还原成 OC 对象
• 在数据操作过程中,无需编写任何 SQL 语句
• 要使用 Core Data , 需要导入 CoreData 框架
模型文件及实体( Entity )
• 要使用 CodeData ,首先需要定义模型文件,描述应用程
序中的所有实体( Entities ) • 所谓实体,是 跟数据库进行映射的对象
NSManagedObject-- 对应数据库中的一条记录
Core Data 主要对象关系示意图 类似于数据库的句柄, handle ,用来操纵数据库
持久化存储调度者,是数据库与对象之间的
在开发中,只会用到一次,如果不理解,直接粘代码
Core Data 主要对象
• NSManagedObjectContext :负责应用和数据库之间的交互 (CRUD)
• NSPersistentStoreCoordinator :添加持久化存储库(如 SQLite 数据 库), 是物理数据存储的物理文件和程序之间的联系的桥梁 ,负责管 理 不同对象上下文
• NSManagedObjectModel :被管理的对象模型 • NSEntityDescription :实体描述
打开数据库
// 1. 实例化持久化的存储
// 1.1 从 Bundle 中加载被管理的数据模型
NSManagedObjectModel *model = [ NSManagedObjectModel mergedModelFromBundles : nil ];
// 1.2 实例化持久化存储调度
NSPersistentStoreCoordinator *store = [[ NSPersistentStoreCoordinator alloc ] initWithManagedObjectModel :model];
...
// 1.3 添加持久化存储 (SQLite)
[store addPersistentStoreWithType : NSSQLiteStoreType configuration : nil URL :url options : nil
error :&error];
...
// 管理对象上下文 _context = [[ NSManagedObjectContext alloc ] init ]; _context . persistentStoreCoordinator = store;
新增记录
Person *p = [ NSEntityDescription insertNewObjectForEntityForName : @"Person" inManagedObjectContext : _context ];
p. name = @" 张三 " ; p. age = @18 ;
[ _context save : nil ];
查询数据 --NSFetchedResultsController NSManagedObjectContext *context = [[ DataManager sharedDataManager ] sharedContext ];
NSFetchRequest *request = [ NSFetchRequest fetchRequestWithEntityName : @"Person" ];
// 定义查询排序 NSSortDescriptor *sort = [ NSSortDescriptor sortDescriptorWithKey : @"name" ascending : YES ]; request. sortDescriptors = @[ sort ] ;
// 定义查询结果控制器 _fetchedResultController = [[ NSFetchedResultsController alloc ] initWithFetchRequest :request
managedObjectContext :context sectionNameKeyPath : nil cacheName : nil ]; ...
[ _fetchedResultController performFetch :&error];
查询数据
NSFetchRequest *request = [ NSFetchRequest fetchRequestWithEntityName : @"Person" ];
request. predicate = [ NSPredicate predicateWithFormat : @"%K LIKE '*52*' OR name CONTAINS ' 三 '" , @"phoneNo" ];
NSArray *array = [ _context executeFetchRequest :request error : nil ];
更新 & 删除记录
1. 找到要更新、删除的记录 2. 更新:修改对象属性 3. 删除:上下文删除对象 4. 上下文保存
Core Data 的调试
技术博客http://www.cnblogs.com/ChenYilong/
新浪微博http://weibo.com/luohanchenyilong
• XML 属性列表 -- PList
• NSKeyedArchiver 归档 • Preference (偏好设置) • SQLite3
• Core Data
Core Data 简介
• Core Data 是 iOS SDK 里的一个很强大的框架,允许程序员 以面向对象 的方式储存和管理数据 。使用 Core Data 框架,程序员可以很轻松有效 地通过面向对象的接口管理数据
• Core Data 框架提供了 对象 - 关系映射 (ORM) 的功能,即能够将 OC 对象转 化成数据,保存在 SQLite3 数据库文件中,也能够将保存在数据库中的 数据还原成 OC 对象
• 在数据操作过程中,无需编写任何 SQL 语句
• 要使用 Core Data , 需要导入 CoreData 框架
模型文件及实体( Entity )
• 要使用 CodeData ,首先需要定义模型文件,描述应用程
序中的所有实体( Entities ) • 所谓实体,是 跟数据库进行映射的对象
NSManagedObject-- 对应数据库中的一条记录
Core Data 主要对象关系示意图 类似于数据库的句柄, handle ,用来操纵数据库
持久化存储调度者,是数据库与对象之间的
在开发中,只会用到一次,如果不理解,直接粘代码
Core Data 主要对象
• NSManagedObjectContext :负责应用和数据库之间的交互 (CRUD)
• NSPersistentStoreCoordinator :添加持久化存储库(如 SQLite 数据 库), 是物理数据存储的物理文件和程序之间的联系的桥梁 ,负责管 理 不同对象上下文
• NSManagedObjectModel :被管理的对象模型 • NSEntityDescription :实体描述
打开数据库
// 1. 实例化持久化的存储
// 1.1 从 Bundle 中加载被管理的数据模型
NSManagedObjectModel *model = [ NSManagedObjectModel mergedModelFromBundles : nil ];
// 1.2 实例化持久化存储调度
NSPersistentStoreCoordinator *store = [[ NSPersistentStoreCoordinator alloc ] initWithManagedObjectModel :model];
...
// 1.3 添加持久化存储 (SQLite)
[store addPersistentStoreWithType : NSSQLiteStoreType configuration : nil URL :url options : nil
error :&error];
...
// 管理对象上下文 _context = [[ NSManagedObjectContext alloc ] init ]; _context . persistentStoreCoordinator = store;
新增记录
Person *p = [ NSEntityDescription insertNewObjectForEntityForName : @"Person" inManagedObjectContext : _context ];
p. name = @" 张三 " ; p. age = @18 ;
[ _context save : nil ];
查询数据 --NSFetchedResultsController NSManagedObjectContext *context = [[ DataManager sharedDataManager ] sharedContext ];
NSFetchRequest *request = [ NSFetchRequest fetchRequestWithEntityName : @"Person" ];
// 定义查询排序 NSSortDescriptor *sort = [ NSSortDescriptor sortDescriptorWithKey : @"name" ascending : YES ]; request. sortDescriptors = @[ sort ] ;
// 定义查询结果控制器 _fetchedResultController = [[ NSFetchedResultsController alloc ] initWithFetchRequest :request
managedObjectContext :context sectionNameKeyPath : nil cacheName : nil ]; ...
[ _fetchedResultController performFetch :&error];
查询数据
NSFetchRequest *request = [ NSFetchRequest fetchRequestWithEntityName : @"Person" ];
request. predicate = [ NSPredicate predicateWithFormat : @"%K LIKE '*52*' OR name CONTAINS ' 三 '" , @"phoneNo" ];
NSArray *array = [ _context executeFetchRequest :request error : nil ];
更新 & 删除记录
1. 找到要更新、删除的记录 2. 更新:修改对象属性 3. 删除:上下文删除对象 4. 上下文保存
Core Data 的调试
技术博客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/3mmIZn
http://blog.csdn.net/jiangshurunhe/article/details/10304309
coredata第三方框架,附上官方示例程序:
数据库工具_CoreData_MagicalRecord-develop