你的位置:首页 > 操作系统

[操作系统]iOS基本数据库存储方式


CoreData

创建模型文件的过程

1.选择模板

2.添加实体

3.添加实体的属性【注意】属性的首字母必须小写

一、CoreData管理类(必备以下三个类对象)

1.CoreData数据操作的上下文,负责所有的数据操作,类似于SQLite的数据库连接句柄(NSManagedObjectContext)

(1).初始化方式

//参数“ct”的类型

//三种类型

/*

     NSConfinementConcurrencyType 默认值,允许在特定的线程中执行,几乎不用

     NSPrivateQueueConcurrencyType  只会在主线程中执行

     NSMainQueueConcurrencyType 允许在子线程中执行

*/

- (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct 

(2).设置持久化存储协调器(属性)

persistentStoreCoordinator

 

2.管理模型(NSManagedObjectModel)

(1).一般都需要先获取获取模型文件的URL地址

/*

参数一:模型文件的名字

参数二:模型文件的后缀名字

【注意】:后缀名为.xcdatamodel的包,里面的.xcdatamodel文件,用数据模型编辑器编辑,编译后为.momd或.mom文件

*/

方法:[[[NSBundle mainBundle] URLForResource:(NSString *)name withExtension:(NSString *)ext]

(2).初始化NSManagedObjectModel对象,加载模型文件,读取App中的所有实体信息

//参数一:该URL即指(1)中的模型文件的url路径

- (nullable instancetype)initWithContentsOfURL:(NSURL *)url;

 

3.持久化存储协调器(NSPersistentStoreCoordinator)

(1).初始化方式

- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model 

 

 

说了这么多,其实以上三个coreData核心对象只要我们在创建工程时,打上该勾选,Xcode就会帮我们搭建好框架的,接下来我们只需要知道怎么调用

 

【注意】黑色表示类名,红色表示类里面的一个属性方法

 

二、添加数据 : 在上下文中插入一个实体(NSManagedObject)

1.model = [NSEntityDescription insertNewObjectForEntityForName:实体名 inManagedObjectContext:管理实体的上下文];

【注意】该model必须是NSManagedObject的对象,一般模型都继承NSManagedObject

2.通过Key-Value模式设置插入模型的属性值

3.将数据同步到持久化存储库 : save模型 [NSManagedObjectContext save:nil]; 

 

三、查询数据

 

1. 指向某个表的请求类

 

//参数entityName:即创建的实体名(在SQLite中称为表名)

 

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:(NSString*)entityName];

 

 

 

2. 添加查询条件

 

(1).条件写死在字符串中

 

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = 50"];

 

 

 

(2).动态传值

 

/*

 

%K 查询的字段

 

%@ 查询的值

 

*/

 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"age", @(50)];

 

 

 

(3).排序(NSSortDescriptor)

 

//第一步:初始化

 

/*

 

参数一:key值,即排序根据的属性

 

参数二:NO为降序,YES为升序

 

*/

 

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

 

//第二步:给fetchRequest添加排序方式

 

fetchRequest.sortDescriptors = @[sort];

 

 

 

(4)范围查询

 

//范围运算符(两种): IN(指定的值)        BETWEEN(开区间)

 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age BETWEEN {15,60}"];

 

 

 

(5).字符串相关查找

 

/*3⃣️

 

    字符串相关:BEGINSWITH、ENDSWITH、CONTAINS

 

    例:

 

    @“属性名 CONTAINS[cd] ‘包含的字符串’”  // 包含某个字符串

 

    @“属性名 BEGINSWITH[c] '包含的字符串'"  // 以某个字符串开头

 

    @"属性名 ENDSWITH[d] '包含的字符串'"   // 以某个字符串结束

 

【注意】:包含的字符串要用单引号括上

 

    注:[c]不区分大小写

 

         [d]不区分发音符号即没有重音符号

 

[cd]既不区分大小写,也不区分发音符号。

 

    */

 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username ENDSWITH 'wu '"];

 

 

 

(6).通配符查找

 

/*   

 

通配符:LIKE

 

     例:

 

     @"属性名 LIKE[cd] '*er*'"    //      *表示多个字符

 

     @"属性名 LIKE[cd] '???er*'"  //      ?表示一个字符

 

     */

 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username LIKE '*san*'"];

 

 

 

…………..还有其他条件设置,我会上传一份比较综合的文档给大家

 

3. 设置查询条件

 

fetchRequest.predicate = predicate;

 

 

 

4. 执行请求,请求的结果被放在数组中,数组中存放的就是模型

 

NSArray *result = [NSManagedObjectContext executeFetchRequest:fetchRequest error:&error];

 

 

四、删除数据

//删除某一个实体(即模型)

[NSManagedObjectContext deleteObject:实体];

只要对模型做了修改,调用save方法就可以自动修改数据库中的值

[NSManagedObjectContext save:nil];

 

五、修改

直接修改模型属性的值

save模型