Realm数据库之简要介绍

Realm数据库能够有效地写出你应用程序的模型层。
它的特点:安全、持续和快速。


Realm简介

1
2
3
4
5
6
Realm 是一个跨平台的移动数据库引擎,可运行于手机、平板和可穿戴设备之上。
于 2014 年 7 月发布,准确来说,它是专门为移动应用所设计的数据持久化解决方案之一。
Realm 可以轻松地移植到您的项目当中,并且绝大部分常用的功能(比如说插入、查询等等)
都可以用一行简单的代码轻松完成! Realm 并不是对 Core Data 的简单封装,相反地,
Realm 并不是基于 Core Data ,也不是基于 SQLite 所构建的。
它拥有自己的数据库存储引擎,可以高效且快速地完成数据库的构建操作。

使用Realm的前提

  • 目前我们还不支持 Android 以外的 Java 环境
  • Android Studio > = 1.5.1
  • 建议使用较新的Android SDK。
  • JDK版本> = 7。
  • Realm支持Android API 9以上所有版本(即Android 2.3姜饼及以上)。

Realm API文档

戳这里

官方详细介绍文档

戳这里

Realm 那些你需要了解的坑

  • RealmObject自带线程保护功能,只能在创建它的线程中访问,在子线程中不能访问。

    1
    2
    也就是说,如果你在主线程中new了一个RealmObject对象 user,那么在子线程中是访问不了user对象的。
    要想在子线程中访问,必须先将user存入Ream中,然后在子线程中query出来。
  • 如果Realm关闭,所有查询得到的RealmObject都不能使用了。

    1
    如果想在子线程中去查询数据,然后在主线程中使用是无法做到的。所以Realm提供的异步查询就很重要了...
  • 如果想在Realm.close()之后继续操作查询得到的对象,只能复制一份数据传出来。

    1
    2
    3
    为防止Realm忘记关闭,个人喜欢将Realm的开启和关闭封装在一个函数中。
    但是realm Colse掉之后,query得到对象就不能访问了,所以只能复制一份数据传出来。
    这个比较坑,Realm开发者是为了它的一个特色功能Auto-Update,即自动更新查询到的数据,特意让查询得到的数据与数据库中的数据保持了同步,所以Realm一关,外面的数据也用不了。而且,这个Auto-update暂时还无法关闭,stackOverFlow上有说以后可能会提供关闭这个功能的方法。如果你的RealmObject非常复杂,要copy一份数据将会很麻烦...
  • 如果直接修改或删除query得到的数据,必须在transaction中完成…

    1
    也就是说,你根本不能把query返回的对象,当成普通对象去赋值或删除,如果想要直接操作...ok,把对象copy一份传出来...
  • 限制

    1
    2
    目前不支持 final、transient 和 volatile 修饰的成员变量,这主要是为了 Realm 对象在不被 Realm 管理(Standalone RealmObject)时候的行为差异化。
    Realm 数据模型不可以继承自除了 RealmObject 以外的其它对象。

    实例

  • 包含当前api的简单示例introExample

  • 多线程下如何使用的示例threadExample

  • 优雅地操作Adpater列表数据的示例adapterExample

  • 介绍GridView存储及将JSON数据使用gson操作的示例gridViewExample

  • 针对json数据的便捷操作示例jsonExample

  • 数据库加密操作示例encryptionExample

  • Rxjava结合使用示例rxJavaExamples

  • 单元测试示例unitTestExample

  • 更多官方示例realm-java

查看Realm数据库的工具(用于调试)

其他说明

  • 该章节主要介绍Realm
  • 后续将介绍如何在项目中使用它