国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS開發-CoreData框架數據持久化

2019-11-14 18:39:49
字體:
來源:轉載
供稿:網友

Core Data

Core Data是iOS5之后才出現的一個框架,它提供了對象-關系映射(ORM)的功能,即能夠將OC對象轉化成數據,保存在SQLite數據庫文件中,也能夠將保存在數據庫中的數據還原成OC對象。在此數據操作期間,我們不需要編寫任何SQL語句,這個有點類似于著名的Hibernate持久化框架,不過功能肯定是沒有Hibernate強大的。

傳統的數據庫要把數據寫到數據庫,而且要寫SQL語句 Core Data 就避免了寫SQL語句的麻煩了

這里寫圖片描述

CoreData的使用步驟

1.創建模型文件 相當于數據庫 
2.添加實體 相當表 
3.創建實體類 相于模型類 
4.生成上下文 關聯模型文件生成數據庫 
5.保存對象到數據庫 
6.從數據庫獲取對象 
7.更新數據 
8.刪除數據

1.創建模型文件 
所謂的創建模型就是間接生成數據庫表 
這里寫圖片描述

2.添加實體 
這里寫圖片描述
3.創建實體類 
以創建員工實體類為例 
這里寫圖片描述

生成上下文件 關聯模型文件生成數據庫

 NSManagedObjectContext  _context = [[NSManagedObjectContext alloc] init];    // 模型文件    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];    // 持久化存儲調度器    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSLog(@"%@",doc);    NSString *sqlitePath = [doc stringByAppendingPathComponent:@"company.sqlite"];    //數據存儲的類型 數據庫存儲路徑    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];    _context.persistentStoreCoordinator = store;
 

保存對象到數據庫

Employee *employee = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:_context];    employee.name = @"zhangsan";    employee.age = @18;    employee.height = @1.89;    [_context save:nil];

打開CoreData的SQL語句輸出開關

    1.打開PRoduct,點擊EditScheme...    2.點擊Arguments,在ArgumentsPassed On Launch中添加2項    1> -com.apple.CoreData.SQLDebug    2> 1

CoreData實例

生成實體類

#import <Foundation/Foundation.h>#import <CoreData/CoreData.h>@interface Employee : NSManagedObject@property (nonatomic, retain) NSString * name;@property (nonatomic, retain) NSNumber * age;@property (nonatomic, retain) NSNumber * height;@end
#import "Employee.h"@implementation Employee@dynamic name;@dynamic age;@dynamic height;@end

這里寫圖片描述

import頭文件框架

#import "ViewController.h"#import <CoreData/CoreData.h>#import "Employee.h"@interface ViewController ()@property(strong,nonatomic)NSManagedObjectContext *context;@end

CoreData模糊查詢

@implementation ViewController#pragma mark 模糊查詢- (IBAction)likeSearcher:(id)sender {    // 查詢    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];    // 過濾    // 1.查詢以wang開頭員工    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH %@",@"wang"];    // 2.以si 結尾    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH %@",@"si"];    // 3.名字包含 g    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",@"g"];    // 4.like 以si結尾    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name like %@",@"li*"];    request.predicate = pre;    //讀取信息    NSError *error = nil;    NSArray *emps = [self.context executeFetchRequest:request error:&error];    if (!error) {        NSLog(@"emps: %@",emps);        for (Employee *emp in emps) {            NSLog(@"%@ %@ %@",emp.name,emp.age,emp.height);        }    }else{        NSLog(@"%@",error);    }}

CoreData 更新數據

#pragma mark 更新員工信息- (IBAction)updateEmployee:(id)sender {    // 把wangwu的身高更改成 1.7    // 1.查找wangwu    NSArray *emps = [self findEmployeeWithName:@"wangwu"];    // 2.更新身高    if (emps.count == 1) {        Employee *emp = emps[0];        emp.height = @1.7;    }    // 3.同步(保存)到數據    [self.context save:nil];}-(NSArray *)findEmployeeWithName:(NSString *)name{    // 1.查找員工    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",name];    request.predicate = pre;    return [self.context executeFetchRequest:request error:nil];}

 

CoreData 刪除數據

#pragma mark 刪除員工- (IBAction)deleteEmployee:(id)sender {    [self deleteEmployeeWithName:@"lisi"];}-(void)deleteEmployeeWithName:(NSString *)name{    // 刪除zhangsan    // 1.查找到zhangsan    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@",name];    request.predicate = pre;    // 2.刪除zhangsan    NSArray *emps = [self.context executeFetchRequest:request error:nil];    for (Employee *emp in emps) {        NSLog(@"刪除員工的人 %@",emp.name);        [self.context deleteObject:emp];    }    // 3.用context同步下數據庫    //所有的操作暫時都是在內存里,調用save 同步數據庫    [self.context save:nil];}

CoreData 查詢數據

#pragma mark 讀取員工信息- (IBAction)readEmployee:(id)sender {    //創建一個請求對象 (填入要查詢的表名-實體類)    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];    // 過濾查詢    // 查找張三 并且身高大于1.8    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name=%@ AND height > %@",@"zhangsan",@(1.8)];//    request.predicate = pre;    //排序 以身高進行升序    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:NO];//    request.sortDescriptors = @[sort];    // 分頁查詢 總共13條數據 每頁顯示5條數據    //第一頁的數據    request.fetchLimit = 5;    request.fetchOffset = 10;    //讀取信息    NSError *error = nil;    NSArray *emps = [self.context executeFetchRequest:request error:&error];    if (!error) {        NSLog(@"emps: %@",emps);        for (Employee *emp in emps) {            NSLog(@"%@ %@ %@",emp.name,emp.age,emp.height);        }    }else{        NSLog(@"%@",error);    }}#pragma mark 添加員工信息- (IBAction)addEmployee:(id)sender {    // 創建員工    Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context];    // 設置員工屬性    emp1.name = @"lisi";    emp1.age = @28;    emp1.height = @2.10;    //保存 - 通過上下文操作    NSError *error = nil;    [self.context save:&error];    if (!error) {        NSLog(@"success");    }else{        NSLog(@"%@",error);    } }

CoreData 創建上下文

-(void)setupContext{    // 1.上下文 關聯Company.xcdatamodeld 模型文件    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];    // 關聯模型文件    // 創建一個模型對象    // 傳一個nil 會把 bundle下的所有模型文件 關聯起來    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];    // 持久化存儲調度器    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];    // 存儲數據庫的名字    NSError *error = nil;    // 獲取docment目錄    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    // 數據庫保存的路徑    NSString *sqlitePath = [doc stringByAppendingPathComponent:@"company.sqlite"];    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&error];    context.persistentStoreCoordinator = store;    self.context = context;}-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    // 創建員工    for (int i = 0; i < 10; i++) {        Employee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.context];        // 設置員工屬性        emp1.name = [NSString stringWithFormat:@"wangwu %d",i];        emp1.age = @(28 + i);        emp1.height = @2.10;        //保存 - 通過上下文操作        NSError *error = nil;        [self.context save:&error];        if (!error) {            NSLog(@"success");        }else{            NSLog(@"%@",error);        }    }  }@end

調用

- (void)viewDidLoad {    [super viewDidLoad];    // 創建一個數據庫 company.sqlite    // 數據庫要一張表 員工表 (name,age,heigt)    // 往數據添加員工信息    // CoreData    [self setupContext];}
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平顺县| 黑龙江省| 石首市| 德化县| 囊谦县| 宕昌县| 托里县| 德惠市| 科技| 龙海市| 水城县| 繁峙县| 绥芬河市| 大石桥市| 临沭县| 托克逊县| 五寨县| 南郑县| 黑河市| 拜泉县| 鄂伦春自治旗| 海门市| 石门县| 鸡泽县| 上饶县| 丽江市| 通州市| 阿拉善盟| 莱州市| 通渭县| 平陆县| 昌江| 宜兰县| 扎赉特旗| 鄯善县| 明光市| 洛川县| 偃师市| 拉萨市| 古田县| 当涂县|