ios的CoreData是一个用来操作sqllite数据库增删改查的工具类,是苹果官网推出来的框架,比直接用c语言操作sqlite稍微简单一点,因为不用书写sql语句,如果你会java,就会发现它和java hibernate框架是差不多的,都是用实体类来操作数据库,c语言操作sqlite数据库的教程我也写过,如下:http://www.tpyyes.com/a/kuozhan/2017/0318/86.html
1)下面开始学习ios coredata的使用,本开发工具为xcode8.2。首先在新建项目的时候勾选“use Core Data”,如图,如果项目已经建好。可以选择项目右键-new File-IOS-Data Model。
这样系统就会自动生成coredata相关的模型文件,如图。
2)点击如上的coredata模型文件之后就可以创建数据库表了,如图所示,
第1步:选择model模型文件。
第2步:添加sqllite数据库表对应的实体类。
第3步:已经创建的coredata实体类。
第4步:添加实体类对应的属性,以后会自动生成对应的数据库表字段。
第5步:如果地区表sitelist有外键指向nation国家表,可以选择sitelist实体,添加part属性指向nation表,用于后续多表操作。
3)自动生成coredata实体类,如图所示,由于mac不方便截图,在此采用别人的图片解释。
通过此步骤之后设计的数据表就会自动object-c实体类了,如下图。
4)下面是coredata对sqllite增删改查,多表查询,模糊查询等操作的代码,如下。
#import "ViewController.h" #import "SiteList+CoreDataProperties.h" #import "Nation+CoreDataProperties.h" @interface ViewController () @property (strong,nonatomic)NSManagedObjectContext *context; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化数据库 [self setupContext]; } //创建数据库方法,会自动生成model模型文件下的数据库表 -(void)setupContext{ //创建上下文,关联MyModel.xcdatamodeld模型文件 NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; //创建模型对象,传nil会把bundle下所有的文件关联起来 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; //持久化存储调度器 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; NSError *err = nil; //存储数据库的名字拼接 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *sqlitePath = [doc stringByAppendingPathComponent:@"user.sqlite"]; NSLog(@"%@",sqlitePath); //开始创建数据库文件 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&err]; context.persistentStoreCoordinator = store; self.context = context; } //添加信息 - (IBAction)addSiteList:(UIButton *)sender { //创建员工 SiteList *site = [NSEntityDescription insertNewObjectForEntityForName:@"SiteList" inManagedObjectContext:self.context]; //设置员工属性 site.id = @"3"; site.name = @"北京"; site.parentSite = @"china"; site.userCount = 19; //通过上下文保存 NSError *erro; [self.context save:&erro]; if (!erro) { NSLog(@"保存成功!"); }else{ NSLog(@"保存失败!"); } } //读取信息 - (IBAction)readSiteList:(UIButton *)sender { //创建一个请求对象 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"]; //过滤查询湖北数据,并且用户数大于19的数据 // NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@ and userCount > %d",@"湖北",19]; // request.predicate = pre; //以站点人数排序,YES代表顺序排序 // NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userCount" ascending:YES]; // request.sortDescriptors = @[sort]; //分页查询,每页5条数据 request.fetchLimit = 5; //第1页从第0条数据查询 request.fetchOffset = 0; //读取信息 NSError *erro; NSArray *arr = [self.context executeFetchRequest:request error:&erro]; if (!erro) { //NSLog(@"arr:%@",arr); for (SiteList *site in arr) { NSLog(@"%@=%@=%d",site.id,site.name,site.userCount); } }else{ NSLog(@"%@",erro); } } //删除信息 - (IBAction)delSiteList:(UIButton *)sender { //查找河北数据 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",@"河北"]; request.predicate = pre; //删除查找数据(只是内存删除,需同步数据库) NSArray *arr = [self.context executeFetchRequest:request error:nil]; for (SiteList *site in arr) { NSLog(@"删除的数据名称:%@",site.name); [self.context deleteObject:site]; } //用context同步数据库 [self.context save:nil]; } //更改信息 - (IBAction)updateSiteList:(UIButton *)sender { //查找信息 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",@"辽宁"]; request.predicate = pre; //更新身高 NSArray *arr = [self.context executeFetchRequest:request error:nil]; for (SiteList *site in arr) { NSLog(@"修改信息成功:%@",site.name); site.name = @"辽宁2"; } //同步数据库 [self.context save:nil]; } //模糊查询 - (IBAction)likeSiteList:(UIButton *)sender { NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"]; //以某某开头 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"湖"]; //以某某结尾 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"北"]; //包含某个字符 //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"宁"]; //like版模糊查询 NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@ ",@"湖*"]; request.predicate = pre; //读取信息 NSError *erro; NSArray *arr = [self.context executeFetchRequest:request error:&erro]; if (!erro) { for (SiteList *site in arr) { NSLog(@"%@=%@=%d",site.id,site.name,site.userCount); } }else{ NSLog(@"%@",erro); } } //多表添加地区和国家数据 - (IBAction)addSiteListAndNation:(UIButton *)sender { //创建地区 SiteList *site = [NSEntityDescription insertNewObjectForEntityForName:@"SiteList" inManagedObjectContext:self.context]; site.id = @"15"; site.name = @"华盛顿"; site.parentSite = @"america"; site.userCount = 36; //创建国家 Nation *nation = [NSEntityDescription insertNewObjectForEntityForName:@"Nation" inManagedObjectContext:self.context]; nation.code = @"america"; nation.name = @"美国"; //关联地区和国家 site.part = nation; //创建地区2 SiteList *site2 = [NSEntityDescription insertNewObjectForEntityForName:@"SiteList" inManagedObjectContext:self.context]; site2.id = @"16"; site2.name = @"澳门"; site2.parentSite = @"china"; site2.userCount = 88; //创建国家2 Nation *nation2 = [NSEntityDescription insertNewObjectForEntityForName:@"Nation" inManagedObjectContext:self.context]; nation2.code = @"china"; nation2.name = @"中国"; //关联地区和国家 site2.part = nation2; NSLog(@"多数据表添加成功!"); //保存数据 [self.context save:nil]; } //多表查询国家下面的所有地区 - (IBAction)findSiteListOfNation:(UIButton *)sender { //查询美国下的所有地区 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SiteList"]; NSPredicate *pre = [NSPredicate predicateWithFormat:@"part.name=%@",@"美国"]; request.predicate = pre; NSArray *arr = [self.context executeFetchRequest:request error:nil]; for (SiteList *site in arr) { NSLog(@"%@=%@=%d",site.id,site.name,site.userCount); } } @end
如果还不会,可以直接百度网盘下载本coredata demo案例进行学习,下载地址如下:
https://pan.baidu.com/s/1miNpDJq