美文网首页
移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)

移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)

作者: 余鹤龄 | 来源:发表于2020-08-12 09:25 被阅读0次

一、使用realm数据库,创建表

创建表是最简单的,创建表就是创建Model模型

image.png

创建一个Person类,继承RLMObject,给上几个属性,一张Person就建好了。

@interfacePerson:RLMObject/**姓名*/@propertyNSString*name;/**年龄*/@propertyNSNumber<RLMInt>*age;/**性别*/@propertyNSString*sex;@propertyRLMArray<Dog>*dogs;@endRLM_ARRAY_TYPE(Person)

再建一个Dog表

#import@interfaceDog:RLMObject@propertyNSString*name;@propertyNSString*color;@propertyNSString*identify;@endRLM_ARRAY_TYPE(Dog)

设置identify为主键

+(NSString*)primaryKey{return@"identify";}

建表总结:做为表对象(继承RLMObject)不能都重写setter和getter方法,这就是Realm一个不好的地方,对我们的数据有一定的侵入性,为解决这个问题,我们可以建立一个rlm对象,一个继承NSObject的对象,例如:

RLMPerson:RLMObject;Person:NSObject;

提供数据换的方式

2、创建一个数据库管理对象

#import@classRLMRealm;@interfaceDataBase:NSObject+(RLMRealm*)db;+(void)dataBaseMigration;+(BOOL)dropRealmIfNeed;@end

#import"DataBase.h"#importstaticRLMRealmConfiguration*_chdRemoteRealmCustomConfig;@implementationDataBase+(RLMRealmConfiguration*)config{staticRLMRealmConfiguration*_config=nil;if(!_config){RLMRealmConfiguration*config=[[RLMRealmConfiguration alloc]init];//配置数据迁移的时候,如果有错误导致崩溃问题,会删除数据库重建,不会崩溃,但是数据会丢失。配置NO数据不会丢失,但是应用会崩溃config.deleteRealmIfMigrationNeeded=YES;NSString*configPath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject]stringByAppendingString:@"/config.realm"];config.fileURL=[NSURL URLWithString:configPath];//设置realm管理的RLMObjects,管理了那么些表,多个数据库表可以分开管理config.objectClasses=@[NSClassFromString(@"Person"),NSClassFromString(@"Dog")];_config=config;}return_config;}+(RLMRealm*)db{RLMRealm*configRealm=[RLMRealm realmWithConfiguration:self.config error:nil];returnconfigRealm;}+(void)dataBaseMigration{//使用自定义配置的config realm进行迁移RLMRealmConfiguration*config=self.config;//配置数据版本,每次项目发布加1config.schemaVersion=2;config.migrationBlock=^(RLMMigration*migration,uint64_t oldSchemaVersion){if(oldSchemaVersion<2){}};}+(BOOL)dropRealmIfNeed{return[[NSFileManager defaultManager]removeItemAtPath:self.config.fileURL.path error:nil];}@end

3、数据存取

关系:一个人可以有多只狗。

Dog*dog1=[[Dogalloc]init];dog1.name=@"阿黄";dog1.color=@"黄色";dog1.identify=@"001";Dog*dog2=[[Dogalloc]init];dog2.name=@"阿黑";dog2.color=@"黑色";dog2.identify=@"002";Person*p=[[Personalloc]init];p.name=@"小明";p.age=@(23);p.sex=@"男";[p.dogs addObject:dog1];[p.dogs addObject:dog2];//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//存入数据库[db beginWriteTransaction];[PersoncreateInRealm:db withValue:p];[db commitWriteTransaction];

用realm brower 打开数据库(上一篇文章有讲到如何下载)

image.png

4、数据删除

//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//查找实体RLMResults*res=[PersonallObjectsInRealm:db];//删除实体[db beginWriteTransaction];[db deleteObjects:res];[db commitWriteTransaction];

这样的写法看起来没有问题,但是打开数据库就发现了其中的问题,Dog表的数据没有删掉,这个realm数据的一个坑,删除person 对象的数据时,并不会删除关联person的dog对象,要手动删除dog

image.png

修改之后的代码

//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//查找实体RLMResults*res=[PersonallObjectsInRealm:db];//删除实体[db beginWriteTransaction];for(inti=0;i<res.count;i++){Person*p=res[i];[db deleteObjects:p.dogs];}[db deleteObjects:res];[db commitWriteTransaction];

image.png

这时能够全部数据都删除了,不会造成数据冗余。我的项目之前由于这个问题造成了血的教训。

5、查找数据

reaml提供很多的查找数据的方式

//查出全表数据

RLMRealm*db=[DataBase db];RLMResults*result=[Person allObjectsInRealm:db];for(inti=0;i<result.count;i++){Person*p=result[i];NSLog(@"%@",p);}RLMResults*DogResult=[Dog allObjectsInRealm:db];for(inti=0;i<DogResult.count;i++){Dog*d=DogResult[i];NSLog(@"%@",d);}

//通过where查询条件

RLMResults *resultWhere = [Dog objectsWhere:@"identify = '001'"];

//通过主键查询

Dog *dog = [Dog objectForPrimaryKey:@"002"];

//通过预言查询

NSPredicate*pre=[NSPredicate predicateWithFormat:@"identify = '002'"];RLMResults*resultPredicate=[[Dog allObjectsInRealm:db]objectsWithPredicate:pre];

代码在这里:https://github.com/icoder20150719/Realm-

相关文章

  • 移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)

    一、使用realm数据库,创建表 创建表是最简单的,创建表就是创建Model模型 image.png 创建一个Pe...

  • 移动端iOS系统数据库之Realm(二)表的创建增删改查

    一、使用realm数据库,创建表 创建表是最简单的,创建表就是创建Model模型 创建一个Person类,继承RL...

  • 数据库操作

    FMDB 创建数据库 创建表 增 删 改 查 索引 事务 多表联查

  • iOS FMDB

    iOS FMDB 数据库创建、增、删、改、查。 创建对象 创建表 integer,text:类型 primary ...

  • mysql数据库的基本操作

    一、基本增删改查二、创建索引的几种方式三、单表查询四、连表查询 一、基本增删改查 1.数据库的增删改查 show ...

  • 数据库的使用

    mysql数据库的客户端 数据库:增删改查 连接数据库 创建数据库 进入数据库 创建数据表 插入数据 筛选所有的员...

  • IOS FMDB的简单实用

    对数据库简单的操作: 增删改查 1、确定存储的路径,并创建文件 打开文件,并创建表 3.增: 往表中添加数据 ...

  • 数据库的存储

    如何创建数据库 数据库的增删改查 增insert into student (name,phone) values...

  • XUtils3框架之数据库操作

    如何创建删除一张表 如何对表进行增删查改操作如何创建数据库和删除数据库建立一表对一表,多表对一表,多表对多表的外键...

  • python基础-03

    python操作mysql数据库 创建数据表 数据表的 增 删 查 改 增 查 改 删

网友评论

      本文标题:移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)

      本文链接:https://www.haomeiwen.com/subject/ojjpdktx.html