下面是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