ios mysql 创建不同的用户表_移动端iOS系统数据库之Realm(二)表的创建增删改查(多表)...

本文介绍了如何在 iOS 中使用 Realm 数据库创建用户表,包括 Person 和 Dog 表的创建,主键设置,数据迁移,以及增删改查的操作。特别强调了 Realm 在删除关联数据时的注意事项,提供了避免数据冗余的方法。
摘要由CSDN通过智能技术生成

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

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

3a46ac4f6a82

image.png

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

@interfacePerson:RLMObject/**姓名*/@propertyNSString*name;/**年龄*/@propertyNSNumber*age;/**性别*/@propertyNSString*sex;@propertyRLMArray*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 打开数据库(上一篇文章有讲到如何下载)

3a46ac4f6a82

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

3a46ac4f6a82

image.png

修改之后的代码

//获取RLMRealm DB对象RLMRealm*db=[DataBasedb];//查找实体RLMResults*res=[PersonallObjectsInRealm:db];//删除实体[db beginWriteTransaction];for(inti=0;i

3a46ac4f6a82

image.png

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

5、查找数据

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

//查出全表数据

RLMRealm*db=[DataBase db];RLMResults*result=[Person allObjectsInRealm:db];for(inti=0;i

//通过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];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值