zoukankan      html  css  js  c++  java
  • IOS-CoreData(增删改查、表关联、分页和模糊查询、多个数据库)

    1>什么是CoreData

    Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的。
     
     
     
    2>CoreData的使用步骤
     
    1.创建模型文件
    2.添加实体
    3.创建实体类
    4.生成上下文 关联模型文件生成数据库
    5.保存对象到数据库
    6.从数据库获取对象
    7.更新数据
    8.删除数据
     
    3>打开CoreData的SQL语句输出开关
     
    1.打开Product,点击EditScheme...
    2.点击Arguments,在ArgumentsPassed On Launch中添加2项
       1> -com.apple.CoreData.SQLDebug
       2> 1
     

    一、CoreData基本使用-增删改查和表关联

      1 //
      2 //  ViewController.m
      3 //  IOS_0121_CoreData
      4 //
      5 //  Created by ma c on 16/1/21.
      6 //  Copyright © 2016年 博文科技. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 #import <CoreData/CoreData.h>
     11 #import "Employee.h"
     12 #import "Department.h"
     13 
     14 @interface ViewController ()
     15 
     16 @property (nonatomic, strong) NSManagedObjectContext *context;
     17 
     18 @end
     19 
     20 @implementation ViewController
     21 
     22 - (void)viewDidLoad {
     23     [super viewDidLoad];
     24     //1.创建模型文件(相当于数据库中的表)
     25     //2.添加实体(一张表)
     26     //3.创建实体类(相当于模型)
     27     //4.生成上下文,关联模型文件生成数据库
     28     
     29     //上下文
     30     self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
     31     //模型数据文件
     32     NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
     33     
     34     //持久化存储器
     35     //把数据保存到一个文件,而不是内存
     36     NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
     37     //数据名字和路径
     38     NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
     39     NSString *sqlitePath = [path stringByAppendingPathComponent:@"company.sqlite"];
     40     NSLog(@"%@",sqlitePath);
     41     
     42     NSURL *url = [NSURL fileURLWithPath:sqlitePath];
     43     [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];
     44     
     45     self.context.persistentStoreCoordinator = store;
     46     
     47 }
     48 //数据库操作ADUQ (ADD、Delete、Update、Query)
     49 #pragma mark - 添加员工
     50 - (IBAction)addEmployee
     51 {
     52     Employee *emp = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context];
     53     
     54     emp.name = @"bowen";
     55     emp.height = @"180";
     56     emp.birthday = [NSDate date];
     57     
     58     
     59     //直接保存
     60     NSError *error = nil;
     61     [self.context save:&error];
     62     
     63     if (error) {
     64         NSLog(@"%@",error);
     65     }
     66 }
     67 
     68 #pragma mark - 查询员工
     69 - (IBAction)searchEmployee
     70 {
     71     //1.NSFetchRequest 抓取请求对象
     72     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
     73     //2.设置过滤条件
     74     NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"bowen"];
     75     request.predicate = pre;
     76     //3.排序
     77     NSSortDescriptor *heightSort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];
     78     request.sortDescriptors = @[heightSort];
     79     //4.执行请求
     80     NSError *error = nil;
     81     NSArray *emps = [self.context executeFetchRequest:request error:&error];
     82     
     83     if (error) {
     84         NSLog(@"%@",error);
     85     }
     86     
     87     for (Employee *emp in emps) {
     88         NSLog(@"name:%@ height:%@ birthday:%@",emp.name, emp.height, emp.birthday);
     89     }
     90 }
     91 
     92 #pragma mark - 更新员工
     93 - (IBAction)updateEmployee
     94 {
     95     //1.查找
     96     //获取对象
     97     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
     98     //设置过滤条件
     99     NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"bowen"];
    100     request.predicate = pre;
    101     //执行请求
    102     NSArray *emps = [self.context executeFetchRequest:request error:nil];
    103     
    104     //2.更新
    105     for (Employee *emp in emps) {
    106         emp.height = @"200";
    107     }
    108     //3.保存
    109     [self.context save:nil];
    110 }
    111 
    112 #pragma mark - 删除员工
    113 - (IBAction)deleteEmployee
    114 {
    115     //1.查找
    116     //获取对象
    117     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
    118     //设置过滤条件
    119     NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"bowen"];
    120     request.predicate = pre;
    121     //执行请求
    122     NSArray *emps = [self.context executeFetchRequest:request error:nil];
    123     
    124     //2.删除
    125     for (Employee *emp in emps) {
    126         [self.context deleteObject:emp];
    127     }
    128     
    129     //3.保存
    130     [self.context save:nil];
    131 }
    132 
    133 #pragma mark - 表关联
    134 - (IBAction)AddRelationship
    135 {
    136     //创建两个部门:IOS、Android
    137     Department *IOSDepart = [NSEntityDescription insertNewObjectForEntityForName:@"Department" inManagedObjectContext:self.context];
    138     IOSDepart.departNo = @"001";
    139     IOSDepart.name = @"IOS";
    140     IOSDepart.createDate = [NSDate date];
    141     
    142     Department *AndroidDepart = [NSEntityDescription insertNewObjectForEntityForName:@"Department" inManagedObjectContext:self.context];
    143     AndroidDepart.departNo = @"002";
    144     AndroidDepart.name = @"Android";
    145     AndroidDepart.createDate = [NSDate date];
    146     
    147     //创建两个员工:bowen1,bowen2
    148     Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context];
    149     emp1.name = @"bowen1";
    150     emp1.height = @"180";
    151     emp1.birthday = [NSDate date];
    152     emp1.depart = IOSDepart;
    153     
    154     Employee *emp2 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context];
    155     emp2.name = @"bowen2";
    156     emp2.height = @"180";
    157     emp2.birthday = [NSDate date];
    158     emp2.depart = AndroidDepart;
    159     
    160     //保存
    161     [self.context save:nil];    
    162 }
    163 
    164 
    165 - (IBAction)searchRelationship
    166 {
    167     //读取IOS部门员工
    168     
    169     //1.NSFetchRequest 抓取请求对象
    170     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
    171     //2.设置过滤条件
    172     NSPredicate *pre = [NSPredicate predicateWithFormat:@"depart.name = %@",@"IOS"];
    173     request.predicate = pre;
    174     //3.执行请求
    175     NSError *error = nil;
    176     NSArray *emps = [self.context executeFetchRequest:request error:&error];
    177     
    178     if (error) {
    179         NSLog(@"%@",error);
    180     }
    181     
    182     for (Employee *emp in emps) {
    183         NSLog(@"name:%@ height:%@ birthday:%@",emp.name, emp.height, emp.birthday);
    184     }
    185 
    186 }
    187 
    188 - (void)didReceiveMemoryWarning {
    189     [super didReceiveMemoryWarning];
    190     // Dispose of any resources that can be recreated.
    191 }
    192 
    193 @end

     三、分页查询和模糊查询

      1 //
      2 //  ViewController.m
      3 //  IOS_0121_CoreData
      4 //
      5 //  Created by ma c on 16/1/21.
      6 //  Copyright © 2016年 博文科技. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 #import <CoreData/CoreData.h>
     11 #import "Employee.h"
     12 #import "Department.h"
     13 
     14 @interface ViewController ()
     15 
     16 @property (nonatomic, strong) NSManagedObjectContext *context;
     17 
     18 @end
     19 
     20 @implementation ViewController
     21 
     22 - (void)viewDidLoad {
     23     [super viewDidLoad];
     24     //1.创建模型文件(相当于数据库中的表)
     25     //2.添加实体(一张表)
     26     //3.创建实体类(相当于模型)
     27     //4.生成上下文,关联模型文件生成数据库
     28     
     29     //上下文
     30     self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
     31     //模型数据文件
     32     NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
     33     
     34     //持久化存储器
     35     //把数据保存到一个文件,而不是内存
     36     NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
     37     //数据名字和路径
     38     NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
     39     NSString *sqlitePath = [path stringByAppendingPathComponent:@"company.sqlite"];
     40     NSLog(@"%@",sqlitePath);
     41     
     42     NSURL *url = [NSURL fileURLWithPath:sqlitePath];
     43     [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];
     44     
     45     self.context.persistentStoreCoordinator = store;
     46     
     47 }
     48 //数据库操作ADUQ (ADD、Delete、Update、Query)
     49 #pragma mark - 添加员工
     50 - (IBAction)addEmployee
     51 {
     52 
     53     for (int i = 0; i < 15; i++) {
     54         Employee *emp = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context];
     55         emp.name = [NSString stringWithFormat:@"bowen%d",i];
     56         emp.height = [NSString stringWithFormat:@"%d",180+i];
     57         emp.birthday = [NSDate date];
     58         
     59     }
     60 
     61     //直接保存
     62     NSError *error = nil;
     63     [self.context save:&error];
     64     
     65     if (error) {
     66         NSLog(@"%@",error);
     67     }
     68 }
     69 
     70 #pragma mark - 分页查询
     71 - (IBAction)pagingAndQuerying
     72 {
     73     //1.NSFetchRequest 抓取请求对象
     74     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
     75     
     76     //2.排序
     77     NSSortDescriptor *heightSort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];
     78     request.sortDescriptors = @[heightSort];
     79     
     80     //3.分页查询
     81     //分页的起始索引
     82     request.fetchOffset = 12;
     83     //分页的条数
     84     request.fetchLimit = 6;
     85     
     86     //4.执行请求
     87     NSError *error = nil;
     88     NSArray *emps = [self.context executeFetchRequest:request error:&error];
     89     
     90     if (error) {
     91         NSLog(@"%@",error);
     92     }
     93     
     94     for (Employee *emp in emps) {
     95         NSLog(@"name:%@ height:%@ birthday:%@",emp.name, emp.height, emp.birthday);
     96     }
     97 }
     98 
     99 - (IBAction)fuzzyQuery
    100 {
    101     //1.NSFetchRequest 抓取请求对象
    102     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
    103     
    104     //2.排序
    105     NSSortDescriptor *heightSort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];
    106     request.sortDescriptors = @[heightSort];
    107     
    108     //3.模糊查询
    109     //名字以“bowen1”开头
    110     //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"bowen1"];
    111     //request.predicate = pre;
    112     
    113     //名字以“1”结尾
    114     //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"1"];
    115     //request.predicate = pre;
    116     
    117     //名字包含“wen1”结尾
    118     //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"1"];
    119     //request.predicate = pre;
    120     
    121     //like
    122     //名字以“1”结尾
    123     //NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@",@"*wen14"];
    124     //request.predicate = pre;
    125     
    126     //名字以“bowen2”开头
    127     NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@",@"bowen2*"];
    128     request.predicate = pre;
    129 
    130 
    131     //4.执行请求
    132     NSError *error = nil;
    133     NSArray *emps = [self.context executeFetchRequest:request error:&error];
    134     
    135     if (error) {
    136         NSLog(@"%@",error);
    137     }
    138     
    139     for (Employee *emp in emps) {
    140         NSLog(@"name:%@ height:%@ birthday:%@",emp.name, emp.height, emp.birthday);
    141     }
    142 }
    143 
    144 @end

     三、创建多个数据库

      1 //
      2 //  ViewController.m
      3 //  IOS_0121_CoreData
      4 //
      5 //  Created by ma c on 16/1/21.
      6 //  Copyright © 2016年 博文科技. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 #import <CoreData/CoreData.h>
     11 #import "Employee.h"
     12 #import "Status.h"
     13 
     14 @interface ViewController ()
     15 
     16 @property (nonatomic, strong) NSManagedObjectContext *companyContext;
     17 @property (nonatomic, strong) NSManagedObjectContext *weibocontext;
     18 
     19 
     20 @end
     21 
     22 @implementation ViewController
     23 
     24 - (void)viewDidLoad {
     25     [super viewDidLoad];
     26     
     27     //一个数据库对应着一个上下文
     28     self.companyContext = [self setupContextWithModelName:@"Company"];
     29     self.weibocontext = [self setupContextWithModelName:@"weibo"];
     30     
     31     
     32 }
     33 
     34 //根据模型文件返回上下文
     35 - (NSManagedObjectContext *)setupContextWithModelName:(NSString *)modelName
     36 {
     37     //1.创建模型文件(相当于数据库中的表)
     38     //2.添加实体(一张表)
     39     //3.创建实体类(相当于模型)
     40     //4.生成上下文,关联模型文件生成数据库
     41     
     42     //上下文
     43     NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
     44     
     45     //模型数据文件
     46     //使用下面的方法,如果boundles为空,会把boundles里面所有的模型文件的表都放在一个数据库中
     47     //NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
     48     
     49     NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);
     50     
     51     NSURL *modelURL = [[NSBundle mainBundle] URLForResource:modelName withExtension:@"momd"];
     52     NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
     53     
     54     //持久化存储器
     55     //把数据保存到一个文件,而不是内存
     56     NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
     57     
     58     //数据名字和路径
     59     NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
     60     
     61     NSString *sqlliteName = [NSString stringWithFormat:@"%@.sqllite",modelName];
     62     
     63     NSString *sqlitePath = [path stringByAppendingPathComponent:sqlliteName];
     64     NSLog(@"%@",sqlitePath);
     65     
     66     NSURL *url = [NSURL fileURLWithPath:sqlitePath];
     67     [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];
     68     
     69     context.persistentStoreCoordinator = store;
     70     
     71     return context;
     72 
     73 }
     74 //数据库操作ADUQ (ADD、Delete、Update、Query)
     75 #pragma mark - 添加
     76 - (IBAction)add
     77 {
     78     Employee *emp = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.companyContext];
     79     emp.name = @"bowen";
     80     emp.height = @"180";
     81     emp.birthday = [NSDate date];
     82     
     83     Status *status = [NSEntityDescription insertNewObjectForEntityForName:@"Status" inManagedObjectContext:self.weibocontext];
     84     status.text = @"回家";
     85     status.createDate = @"2015-01-28";
     86     
     87     [self.companyContext save:nil];
     88     [self.weibocontext save:nil];
     89     
     90     
     91     
     92     
     93     
     94 
     95 }
     96 
     97 #pragma mark - 查询
     98 - (IBAction)querying
     99 {
    100     
    101 }
    102 
    103 
    104 @end
  • 相关阅读:
    High availability: Oracle RAC vs. RAC One Node vs. Data Guard
    ORACLE 12C RAC修改ocr/votedisk/asm spfile所在磁盘组名称
    Oracle性能排查小案例
    Oracle技术支持是如何分析数据库性能问题的
    【翻译】19C Oracle 安装指导
    Install Grid Infrastructure 12c On Standalone Server
    Linux平台oracle 11g单实例 + ASM存储 安装部署
    HOW TO USE ORACLE RESTART IN ORACLE 11GR2
    单机安装Oracle RAC (zt)
    flink on yarn启动失败
  • 原文地址:https://www.cnblogs.com/oc-bowen/p/5164460.html
Copyright © 2011-2022 走看看