【CoreData】多个数据库使用

在事实上成本中,往往必要各类模块使用不一致数据库,而CoreData也装有这样的机能,使用起来也很便利:

先是大家创造2个模型文件(School和Educationist)

//
1.创办模型文件 (相当于一个数据库里的表)

//
New File ———— CoreData ———— Data Model ————
Next图片 1

图片 2

//
2.添加实体 (相当于一张表)

// 找到我们创造的模型文件(xxx.xcdatamodeld,我成立的叫School.xcdatamodeld)————Add
Entity ———— 添加表内属性(这边我添加2个特性(name,age))

图片 3
图片 4

// 3.成立实体类

//
New File ———— CorData ———— NSManagedobject subclass
————Next(记得拔取需求关联的表)那样就会自动生成相应的模子

图片 5

// 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语句。

 

网站地图xml地图