Realm数据库的使用


Realm数据库的使用_第1张图片

摘要

Realm是一个跨平台的移动数据库引擎,支持iOS、OS X(Objective-C和Swift)以及Android。专门为移动应用的数据持久化而生,相比Core Data 和 SQLite冗余、繁杂的知识更加易学上手,可以极大的减少学习的成本。

使用背景

之前也是在一篇技术文章上看到Realm的介绍,感觉是挺好的,但是没有具体去用,直到有自己的一个业余项目,这个项目的业务场景是这样的,这是一个用于门禁监控的一款应用,我们的后台什么的都是用的第三方的服务,所以数据什么的基本上是我们在本地处理.我第一时间就想到了Realm

参考网站:https://realm.io  

使用流程

1.创建类,继承于RLMObject.

2.导入头文件#import < Realm/Realm.h >.

3.在类中生成数据模型.

4.在需要的地方创建实例,使用Realm方法调用.

数据模型结构如下

@interface DeviceListModel : RLMObject

@property (nonatomic,copy)NSString *did; //设备云端身份标识 DID

@property (nonatomic,copy)NSString *productKey; // NSString类型。设备的产品类型识别码

@property (nonatomic,copy)NSString *productName;//设备的产品名称

@property (nonatomic,strong)RLMArray*ezmodels;//绑定的摄像头模型

@end

自定义主键

由于项目需要每一个控制面板可以绑定多个摄像头的应用场景,由此我想到用面板的唯一标识(英文、数字)作为主键(比起我之前用过的CoreModel主键更胜一筹,CoreModel主键只能是Int~0~,在此处完全不适用)

@implementation DeviceListModel

+ (NSString *)primaryKey {

return @"did";

}

@end

数据库写入操作

数据库的写入操作十分简单,只需要把我们的Model实例化,赋值,调用Realm提供的方法,全自动建表写入。

devModel = [[DeviceListModel alloc] init];

devModel.did = dev.did;

devModel.productKey = dev.productKey;

devModel.productName = dev.productName;

RLMRealm *realm = [RLMRealm defaultRealm];

[realm beginWriteTransaction];

[DeviceListModel createOrUpdateInRealm:realm withValue:devModel];

[realm commitWriteTransaction];

数据库查询与删除操作

谓词对我们iOS开发人员来说再熟悉不过了,在Realm里同样适用,我们只需要传递相应地NSPredicate实例,谓词字符串,谓词格式字符串,就可以获取你想要的RLMObjects实例。就和NSObject一样的。

NSString *whereGz = [NSString stringWithFormat:@"did = '%@' ",dev.did];

RLMResults *allGzdevice = [DeviceListModel objectsWhere:whereGz];

if (allGzdevice.count) {

RLMResults *tempArra1 = [DeviceListModel allObjects];

DeviceListModel *devModel = allGzdevice[0];

RLMRealm *realm = [RLMRealm defaultRealm];

[realm beginWriteTransaction];

[devModel.ezmodels removeAllObjects];

[realm commitWriteTransaction];

RLMResults *tempArra = [DeviceListModel allObjects];

[tableView reloadData];

}

数据迁移

当您使用任意一个数据库时,您随时都可能打算修改您的数据模型。通过设置 RLMRealmConfiguration.schemaVersion 以及RLMRealmConfiguration.migrationBlock 可以定义一个迁移操作以及与之关联的架构版本。 迁移闭包将会提供提供相应的逻辑操作,以让数据模型从之前的架构转换到新的架构中来。 每当通过配置创建完一个 RLMRealm 之后,迁移闭包将会在迁移需要的时候,将给定的架构版本应用到更新 RLMRealm 操作中。

// 在 [AppDelegate didFinishLaunchingWithOptions:] 中进行配置

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];

// 设置新的架构版本。这个版本号必须高于之前所用的版本号(如果您之前从未设置过架构版本,那么这个版本号设置为 0)

config.schemaVersion = 1;

// 设置闭包,这个闭包将会在打开低于上面所设置版本号的 Realm 数据库的时候被自动调用

config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {

// 目前我们还未进行数据迁移,因此 oldSchemaVersion == 0

if (oldSchemaVersion < 1) {

// 什么都不要做!Realm 会自行检测新增和需要移除的属性,然后自动更新硬盘上的数据库架构

}

};

// 告诉 Realm 为默认的 Realm 数据库使用这个新的配置对象

[RLMRealmConfiguration setDefaultConfiguration:config];

// 现在我们已经告诉了 Realm 如何处理架构的变化,打开文件之后将会自动执行迁移

[RLMRealm defaultRealm];

Realm可视化操作工具

Realm Browser是Realm的一个可视化操作工具,可以帮助我们更好的读写Realm 数据库,管理起来更加的简单。



以上只是我对Realm简单使用的一个介绍,realm还有很多强大的特点没有介绍到,要想更深层处的了解,可以查阅官网文档,文档写得非常详细。

你可能感兴趣的:(Realm数据库的使用)