关注微信公众号 太平洋学习网 扫描二维码
最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

iOS CoreData使用教程及增删改查demo

扩展 太平洋学习网 浏览 评论

ios的CoreData是一个用来操作sqllite数据库增删改查的工具类,是苹果官网推出来的框架,比直接用c语言操作sqlite稍微简单一点,因为不用书写sql语句,如果你会java,就会发现它和java hibernate框架是差不多的,都是用实体类来操作数据库,c语言操作sqlite数据库的教程我也写过,如下:http://www.tpyyes.com/a/kuozhan/2017/0318/86.html

QQ20170403-143516.png

1)下面开始学习ios coredata的使用,本开发工具为xcode8.2。首先在新建项目的时候勾选“use Core Data”,如图,如果项目已经建好。可以选择项目右键-new File-IOS-Data Model。

1019712-a152a1fe821d2058.png

这样系统就会自动生成coredata相关的模型文件,如图。

QQ20170403-120513.png

 2)点击如上的coredata模型文件之后就可以创建数据库表了,如图所示,

QQ20170403-135329.png

第1步:选择model模型文件。

第2步:添加sqllite数据库表对应的实体类。

第3步:已经创建的coredata实体类。

第4步:添加实体类对应的属性,以后会自动生成对应的数据库表字段。

第5步:如果地区表sitelist有外键指向nation国家表,可以选择sitelist实体,添加part属性指向nation表,用于后续多表操作。

3)自动生成coredata实体类,如图所示,由于mac不方便截图,在此采用别人的图片解释。

1019712-93fc935f7b3273a4.png

通过此步骤之后设计的数据表就会自动object-c实体类了,如下图。

QQ20170403-141130.png

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


来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/kuozhan/2017/0403/88.html

    与本文相关的文章