CoreData的使用
来源:互联网 发布:互联网软件类型 编辑:程序博客网 时间:2024/06/06 10:10
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句
CoreData的使用步骤
1.创建模型文件相当于数据库
2.添加实体相当表
3.创建实体类相于模型类
4.生成上下文 关联模型文件生成数据库
5.保存对象到数据库
6.从数据库获取对象
7.更新数据
8.删除数据
1、创建模型文件:(相当于数据库)
2、添加实体(相当于表)
3、创建实体类(相当于模型类)
4、生成上下文 关联模型文件生成数据库
<span style="font-size:18px;">// 1.上下文 关联Company.xcdatamodeld 模型文件 NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; // 关联模型文件 // 创建一个模型对象 // 传一个nil 会把 bundle下的所有模型文件 关联起来 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; // 创建一个持久化存储调度器 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; // 存储数据库的名字 NSError *error = nil; // 获取docment目录 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 数据库保存的路径(拼接路径) NSString *sqlitePath = [doc stringByAppendingPathComponent:@"company.sqlite"]; [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&error]; // 上下文的持久化存储调度器赋值 context.persistentStoreCoordinator = store; self.context = context;</span><span style="color:#4f81bd;font-size:24px;"></span>
增、删、改、查
增:
#pragma mark 添加员工信息- (IBAction)addEmployee:(id)sender { // 创建员工 Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context]; // 设置员工属性 emp1.name = @"lisi"; emp1.age = @28; emp1.height = @2.10; //保存 - 通过上下文操作 NSError *error = nil; [self.context save:&error]; if (!error) { NSLog(@"success"); }else{ NSLog(@"%@",error); }}
查:
#pragma mark 读取员工信息- (IBAction)readEmployee:(id)sender { //创建一个请求对象 (填入要查询的表名-实体类) NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; // 过滤查询 // 查找张三 并且身高大于1.8// NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@ AND height > %@",@"zhangsan",@(1.8)];// request.predicate = pre; //排序 以身高进行升序// NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:NO];// request.sortDescriptors = @[sort]; // 分页查询 总共13条数据 每页显示5条数据 //第一页的数据 request.fetchLimit = 5; request.fetchOffset = 10; //读取信息 NSError *error = nil; NSArray *emps = [self.context executeFetchRequest:request error:&error]; if (!error) { NSLog(@"emps: %@",emps); for (Employee *emp in emps) { NSLog(@"%@ %@ %@",emp.name,emp.age,emp.height); } }else{ NSLog(@"%@",error); }}
#pragma mark 模糊查询- (IBAction)likeSearcher:(id)sender { // 查询 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; // 过滤 // 1.查询以wang开头员工 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"wang"]; // 2.以si 结尾 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"si"]; // 3.名字包含 g //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"g"]; // 4.like 以si结尾 NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@",@"li*"]; request.predicate = pre; //读取信息 NSError *error = nil; NSArray *emps = [self.context executeFetchRequest:request error:&error]; if (!error) { NSLog(@"emps: %@",emps); for (Employee *emp in emps) { NSLog(@"%@ %@ %@",emp.name,emp.age,emp.height); } }else{ NSLog(@"%@",error); } }
改:
#pragma mark 更新员工信息- (IBAction)updateEmployee:(id)sender { // 把wangwu的身高更改成 1.7 // 1.查找wangwu NSArray *emps = [self findEmployeeWithName:@"wangwu"]; // 2.更新身高 if (emps.count == 1) { Employee *emp = emps[0]; emp.height = @1.7; } // 3.同步(保存)到数据 [self.context save:nil];}-(NSArray *)findEmployeeWithName:(NSString *)name{ // 1.查找员工 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",name]; request.predicate = pre; return [self.context executeFetchRequest:request error:nil]; }
删:
#pragma mark 删除员工- (IBAction)deleteEmployee:(id)sender { [self deleteEmployeeWithName:@"lisi"];}-(void)deleteEmployeeWithName:(NSString *)name{ // 删除zhangsan // 1.查找到zhangsan NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",name]; request.predicate = pre; // 2.删除zhangsan NSArray *emps = [self.context executeFetchRequest:request error:nil]; for (Employee *emp in emps) { NSLog(@"删除员工的人 %@",emp.name); [self.context deleteObject:emp]; } // 3.用context同步下数据库 //所有的操作暂时都是在内存里,调用save 同步数据库 [self.context save:nil];}
多表关联:
增删改查:
增:
#pragma mark 添加员工信息- (IBAction)addEmployee:(id)sender { // 创建员工 // 1.添加zhangsan 属于ios部门 Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context]; emp1.name = @"zhangsan"; emp1.height = @1.7; emp1.age = @27; // 创建ios部门 Department *dep1 = [NSEntityDescription insertNewObjectForEntityForName:@"Department" inManagedObjectContext:self.context]; dep1.name = @"ios"; dep1.createDate = [NSDate date]; dep1.departNo = @"D001"; emp1.depart = dep1; // 2.添加lisi 属于android 部门 Employee *emp2 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context]; emp2.name = @"lisi"; emp2.height = @1.7; emp2.age = @27; // 创建android部门 Department *dep2 = [NSEntityDescription insertNewObjectForEntityForName:@"Department" inManagedObjectContext:self.context]; dep2.name = @"android"; dep2.createDate = [NSDate date]; dep2.departNo = @"D002"; emp2.depart = dep2; //一次保存 [self.context save:nil]; }查:
#pragma mark 读取员工信息- (IBAction)readEmployee:(id)sender { //查找ios部门的员工 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; // 过滤查询 NSPredicate *pre = [NSPredicate predicateWithFormat:@"depart.name = %@",@"ios"]; request.predicate = pre; //读取信息 NSError *error = nil; NSArray *emps = [self.context executeFetchRequest:request error:&error]; if (!error) { NSLog(@"emps: %@",emps); for (Employee *emp in emps) { NSLog(@"name:%@ departName:%@ ",emp.name,emp.depart.name); } }else{ NSLog(@"%@",error); }}
#pragma mark 模糊查询- (IBAction)likeSearcher:(id)sender { // 查询 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; // 过滤 // 1.查询以wang开头员工 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"wang"]; // 2.以si 结尾 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"si"]; // 3.名字包含 g //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"g"]; // 4.like 以si结尾 NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@",@"li*"]; request.predicate = pre; //读取信息 NSError *error = nil; NSArray *emps = [self.context executeFetchRequest:request error:&error]; if (!error) { NSLog(@"emps: %@",emps); for (Employee *emp in emps) { NSLog(@"%@ %@ %@",emp.name,emp.age,emp.height); } }else{ NSLog(@"%@",error); } }
改:
#pragma mark 更新员工信息- (IBAction)updateEmployee:(id)sender { // 把wangwu的身高更改成 1.7 // 1.查找wangwu NSArray *emps = [self findEmployeeWithName:@"wangwu"]; // 2.更新身高 if (emps.count == 1) { Employee *emp = emps[0]; emp.height = @1.7; } // 3.同步(保存)到数据 [self.context save:nil];}-(NSArray *)findEmployeeWithName:(NSString *)name{ // 1.查找员工 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",name]; request.predicate = pre; return [self.context executeFetchRequest:request error:nil]; }
删:
#pragma mark 删除员工- (IBAction)deleteEmployee:(id)sender { [self deleteEmployeeWithName:@"lisi"];}-(void)deleteEmployeeWithName:(NSString *)name{ // 删除zhangsan // 1.查找到zhangsan NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",name]; request.predicate = pre; // 2.删除zhangsan NSArray *emps = [self.context executeFetchRequest:request error:nil]; for (Employee *emp in emps) { NSLog(@"删除员工的人 %@",emp.name); [self.context deleteObject:emp]; } // 3.用context同步下数据库 //所有的操作暂时都是在内存里,调用save 同步数据库 [self.context save:nil];}
多个数据库:
一个上下文只能关联一个数据库,所以需要创建两个上下文
<span style="font-family: 微软雅黑;">- (void)viewDidLoad {</span>
[super viewDidLoad]; //创建company上下文 self.companyContext = [self setupContextWithModelName:@"Company"]; //创建weibo上下文 self.weiboContext = [self setupContextWithModelName:@"Weibo"]; }/** * 根据模型文件名 返回上下文 */-(NSManagedObjectContext *)setupContextWithModelName:(NSString *)modelName{ // 1.上下文 关联Company.xcdatamodeld 模型文件 NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; // 关联模型文件 // 创建一个模型对象 // 传一个nil 会把 bundle下的所有模型文件 关联起来 // 查找model文件的URL NSURL *modelURL = [[NSBundle mainBundle] URLForResource:modelName withExtension:@"momd"]; NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; // 持久化存储调度器 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; // 存储数据库的名字 NSError *error = nil; // 获取docment目录 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 数据库保存的路径 NSString *sqlitePath = [doc stringByAppendingFormat:@"/%@.slqite",modelName]; [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&error]; context.persistentStoreCoordinator = store; return context;}
#pragma mark 添加员工和微博信息信息- (IBAction)addEmployee:(id)sender { //创建员工 Employee *emp = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.companyContext]; emp.name = @"zhangsan"; emp.height = @1.8; emp.age = @25; [self.companyContext save:nil]; //创建微博 Status *sts = [NSEntityDescription insertNewObjectForEntityForName:@"Status" inManagedObjectContext:self.weiboContext]; sts.text = @"祝愿大家找到好工作"; sts.author = @"gzios 1期"; sts.createDate = [NSDate date]; [self.weiboContext save:nil];}
sqlite 和 CoreData 对比
sqlite是纯c语言存储数据方式
coredata也是对sqlite的封装,它数据的保存直接使用对象,不用再写sql语句
sqlite 性能优于 coredata
•什么时候使用sqlite什么时候使用CoreData
"Coredata功能不是很强大
如果你的数据库表关联大复杂三四张表都关联 -sqlite
如果数据表结构比较简单就只有两三张,这些表没有关联关系 coreData
0 0
- CoreData的使用
- CoreData - Mogenerator 的使用
- CoreData的使用
- CoreData的简单使用
- coredata的使用
- CoreData的使用
- CoreData的基本使用
- CoreData 的是使用
- CoreData+MagicalRecord的使用
- CoreData的基本使用
- CoreData的使用
- CoreData的使用
- CoreData的使用
- IOS - CoreData的使用
- CoreData 的使用 ---转载
- CoreData的使用
- CoreData的简单使用
- CoreData的简单使用
- js中MAP集合的构造
- MongoDB 学习笔记六 aggregate GROUP使用
- python与zmq系列(6)
- java equals()方法和"=="的简介
- 原生JS判断手机还是电脑登陆
- CoreData的使用
- Liferay Portal 学习笔记(二):liferay项目结构剖析
- 博客开张了!
- Android定位功能(一)
- ubuntu10.04 + mysql安装
- 解析大型.NET ERP系统:十三种界面设计模式
- 成都居住证最新办理攻略(附居住证落户指南)
- 由浅入深学习自定义控件(6)- 超简捷的slidemenu实现
- Keep Your Perspective