美文网首页
Realm数据库的使用

Realm数据库的使用

作者: 星星点灯0_0 | 来源:发表于2017-03-29 10:53 被阅读0次


    摘要

    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数据库的使用

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