【CoreData】多个数据库使用
// 1.创建模型文件 (相当于一个数据库里的表)
// New File ———— CoreData ———— Data Model ———— Next
// 2.添加实体 (相当于一张表)
// 找到我们创建的模型文件(xxx.xcdatamodeld,我创建的叫School.xcdatamodeld)————Add
Entity ———— 添加表内属性(这边我添加2个属性(name,age))

// 3.创建实体类
// New File ———— CorData ———— NSManagedobject subclass ————Next(记得选择需要关联的表)这样就会自动生成相应的模型
// Educationist创建方式和School一样
创建好模型文件后,我们怎样才能让每个模型文件独立呢?我们可以从上下文入手,因为每个上下文对应一个数据库。
//我们先将上下文的创建方式独立出来,以便以后使用
- (NSManagedObjectContext*)setupContextWithModelName:(NSString*)modelName
{
// 生成上下文关联模型文件生成数据库(关联的时候,如果本地没有数据库文件,CoreData会自己创建)
//
上下文,记得引用CoreData框架
NSManagedObjectContext
*context= [[NSManagedObjectContext alloc]init];
// 上下文关联数据库
NSURL*sqlURL= [[NSBundlemainBundle]URLForResource:modelNamewithExtension:@"momd"];
NSManagedObjectModel
*model= [[NSManagedObjectModel alloc]initWithContentsOfURL:sqlURL];
//持久化存储调度器(持久化:把数据保存在一个文件,而不是放在内存中)
NSPersistentStoreCoordinator
*store= [[NSPersistentStoreCoordinator
alloc]initWithManagedObjectModel:model];
//
告诉CoreData数据库的名字和路径
NSString*doc= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
NSString*sqliteStr = [NSStringstringWithFormat:@"%@.sqlite",modelName];
NSString*sqlitePath = [doc
stringByAppendingPathComponent:sqliteStr];
[storeaddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:[NSURLfileURLWithPath:sqlitePath]options:nilerror:nil];
context.persistentStoreCoordinator=store;
returncontext;
}
// 然后在需要用到上下文的地方调用此方法就可以了
_schoolContext=[selfsetupContextWithModelName:@"School"];
_educationistContext= [self
setupContextWithModelName:@"Educationist"];
这样数据库就独立出来了,测试一下:
#pragma mark - 添加
- (void)addStudent
{
// 创建一个学生对象
// Student *stu = [[Student alloc] init];
Student*stu=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_schoolContext];
stu.name=
@"李四";
stu.age=
@1.9;
//
直接保存数据库
[_schoolContext
save:nil];
// 创建一间学校对象
School*sch= [NSEntityDescriptioninsertNewObjectForEntityForName:@"School"inManagedObjectContext:_educationistContext];
sch.name=
@"张三中学";
sch.no=
@1.0;
//
直接保存数据库
[_educationistContext
save:nil];
}
#pragma mark - 读取
- (void)readStudent
{
// FectchRequest
抓取请求对象
NSFetchRequest
*request= [NSFetchRequest fetchRequestWithEntityName:@"Student"];
//
执行请求
NSArray*stus = [_schoolContextexecuteFetchRequest:requesterror:nil];
for(Student*stu
instus)
{
NSLog(@"名字:%@身高:%@",stu.name,stu.age);
}
// FectchRequest
抓取请求对象
NSFetchRequest
*request2= [NSFetchRequest fetchRequestWithEntityName:@"School"];
//
执行请求
NSArray*schs = [_educationistContextexecuteFetchRequest:request2error:nil];
for(School*sch
inschs) {
NSLog(@"学校名称:%@编号:%@",sch.name,sch.no);
}
}
2015-10-30 12:20:20.632 CoreData多个数据库使用[1727:66199]名字:李四
身高:1.9
2015-10-30 12:20:20.632 CoreData多个数据库使用[1727:66199]学校名称:张三中学
编号:1
就是这么简单,到这里CoreData简单的使用就结束了!
CoreData的底层就是帮我们把sql语句进行封装,使我们可以避免使用sql语句,更好地进行开发,但肯定是在牺牲运行效率的情况下。
如果需要查看CoreData运行过程中帮我们写了哪些sql语句,可以使用这个方法:
1.打开Product ———— EditScheme… ————Arguments ———— 在ArgumentsPassed OnLaunch中添加两项(顺序不可变)
1>-com.apple.CoreData.SQLDebug
2> 1
这样再次运行APP就会在控制台输出CoreData运行过程中使用的sql语句。
【CoreData】多个数据库使用的更多相关文章
- iOS CoreData版本升级和数据库迁移
app中使用了CoreData,并且在下一个版本中有实体变动,比如实体新增字段.修改字段等改动, 那么app在覆盖安装时就要进行数据库迁移, 否则app就会crash. 那如何实现数据库迁移呢?大概需 ...
- 优于CoreData的Realm数据库基础教程
Realm 是一个跨平台的移动数据库引擎,于 2014 年 7 月发布,准确来说,它是专门为移动应用所设计的数据持久化解决方案之一. Realm 可以轻松地移植到您的项目当中,并且绝大部分常用的功能( ...
- iOS - CoreData 数据库存储
1.CoreData 数据库 CoreData 是 iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据.使用 CoreData 框架,程序员可以很轻松有效地通过面向对象的接 ...
- CoreData 数据库
封装CoreManager类 @implementation CoreDataManager { //上下文 NSManagedObjectContext *_ctx; } //单例 +(instan ...
- IOS数据存储之FMDB数据库
前言: 最近几天一直在折腾数据库存储,之前文章(http://www.cnblogs.com/whoislcj/p/5485959.html)介绍了Sqlite 数据库,SQLite是一种小型的轻量级 ...
- IOS中CoreData浅析
CoreData简介: 什么是CoreData? Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中, ...
- CoreData基础
CoreData用于做数据持久化,适合大数据量的存储和查询 CoreData不是数据库 CoreData可以使用数据库 ,XML等方式来存储数据 CoreData使用面向对象的方式操作数据 CoreD ...
- 高级UIKit-05(CoreData)
[day06_1_CoreDataPerson]:保存person对象到coreData数据库 保存大量数据时用CoreData保存到数据库,数据库会存在documents目录下 操作步骤: 1.创建 ...
- CoreData归纳使用
1.CoreData简介 2.CoreData数据模型 3.CoreData的主要对象 4.使用CoreData实现数据存储 一.CoreData简介 CoreData用做数据持久化,是数据持久化的最 ...
随机推荐
- Laravel学习
Laravel是个很强大的PHP框架,它剔除了开发中Web开发中比较痛苦的过程,提供了验证(authentication),路由(routing),Session和缓存(caching)等开发过程中常 ...
- 提高生产性工具 - Model代码生成器(二)
首先,我想阐述一下我开发这个工具的一个观点. 如果大家做过对日软件的话,很多时候,日方是进行设计的,数据模型是什么样子的,各个字段的类型,需要做什么验证,验证规则,错误信息,都是日方制定的. 外包就是 ...
- java中实现同步的两种方式:syschronized和lock的区别和联系
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
- spring笔记2 spring MVC的基础知识2
2,spring MVC的注解驱动控制器,rest风格的支持 作为spring mvc的明星级别的功能,无疑是使得自己的code比较优雅的秘密武器: @RequestMapping处理用户的请求,下面 ...
- Android获取ROOT权限
获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了. // 获取ROOT权限 public void get_root(){ if (is_ ...
- ListView 使用 LiveBindings 显示超过 200 条记录
ListView 使用 LiveBindings 预设加载 200 条记录,这也许是速度的考量,但当需要全部加载的的情况时,该如何做呢?只需加入下面二行代码即可: FDQuery1.OptionsIn ...
- MongoDB学习-安装流程
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型. ...
- HDU 5703 Desert 水题 找规律
已知有n个单位的水,问有几种方式把这些水喝完,每天至少喝1个单位的水,而且每天喝的水的单位为整数.看上去挺复杂要跑循环,但其实上,列举几种情况之后就会发现是找规律的题了= =都是2的n-1次方,而且这 ...
- Python Sqlite3以字典形式返回查询结果
sqlite3本身并没有像pymysql一样原生提供字典形式的游标. cursor = conn.cursor(pymysql.cursors.DictCursor) 但官方文档里已经有预留了相应的实 ...
- jQuery Mobile页面返回无需重新get
最近公司的web app项目,使得我有幸一直接触和学习jQuery Mobile.这确实是一个很不错的移动开发库,有助于擅长web开发的工程师,快速入门并构建自己的移动应用.但是在前两天,我碰到了一个 ...