Realm数据库的使用


摘要

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还有很多强大的特点没有介绍到,要想更深层处的了解,可以查阅官网文档,文档写得非常详细👍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容