美文网首页
Android数据库---Realm

Android数据库---Realm

作者: trry_ing | 来源:发表于2018-05-03 15:23 被阅读24次

简介

Realm 大部分代码都是开源的,但是其强大功能取决于隐藏在平台内部的一个核心数据库引擎,这个引擎完全由 C++ 编写而成。

Realm 本质上是一个嵌入式数据库,但是它也是看待数据的另一种方式。它用另一种角度来重新看待你移动应用中的模型和业务逻辑。

Realm 最核心的理念就是对象驱动,这是 Realm 的核心原则。

简单来说,Realm有自己独立的引擎,跟Sqlite完全不同。
Realm主要是用与数据库关联对象的实例来操作,并且增删改都要在事务中进行。
例如在项目中有个User数据类,继承RealmObject:

User user = new User();
realm.beginTransation();
realm.copyToRealm(user);
// 对user对象的操作就是修改数据库中对应的数据
realm.commitTransation();

Realm不支持主键自动增长


image.png
image.png

查看官方文档,建议创建对象实例,设置主键,再copyToRealm关联对象。

懒加载


image.png

官方建议是写操作不在UI线程执行,否则有阻塞的可能。


image.png

在删除数据库记录时,数据库文件可能不会及时被清理,可以调用compactRealm释放可以释放的磁盘空间


image.png

使用(官方说明文档)

创建Model

继承RealmObject来声明Realm数据模型

public class Shop extends RealmObject {
    @PrimaryKey
    private Long id;
    //商品名称
    private String name;

    // get/set方法
}

除了继承RealmObject外,还可以实现RealmModel。使用实现RealmModel方式可以用RealmObject中的静态方法来操作数据。

@RealmClass 
public class User implements RealmModel {
    .......
}

事务

realm所有修改操作要开启事务(即查询无需开启事务),开启事务有两种方式
第一种是直接开启事务,第二种是使用事务回调方法

// 第一种 直接开启事务
realm.beginTransaction();
/* 数据库操作 */
realm.commitTransaction();

// 第二种 使用事务回调方法
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        /* 数据库操作 */
    }
});
// 第二种还可以使用异步回调方法
realm.executeTransactionAsync(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        /* 数据库操作 */
    }
}, new Realm.Transaction.OnSuccess() {
    @Override
    public void onSuccess() {
        /* 数据库操作成功回调 */
    }
}, new Realm.Transaction.OnError() {
    @Override
    public void onError(Throwable error) {
        /* 数据库操作失败回调 */
    }
});

添加

realm添加有两种
第一种是用realm.createObject()创建关联实例对象
第二种是先创建对象,再用realm.copyToRealm()来关联实例对象

public void save() {
    realm.beginTransaction();

    // 第一种
    Shop shop1 = realm.createObject(Shop.class);
    // 第二种
    Shop shop2 = new Shop();
    realm.copyToRealm(shop2);

    realm.commitTransaction();
}

删除

public void delete() {
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            RealmResults<Shop> results = realm.where(Shop.class).findAll();

            Shop shop = results.get(1);
            if (shop != null) {
                shop.deleteFromRealm();
                //RealmObject.deleteFromRealm(shop);
            }
            results.deleteFromRealm(1);
        }
    });
}

查询

public void find() {
    RealmResults<Shop> all = realm.where(Shop.class).findAll();
    Shop shop = realm.where(Shop.class).equalTo("id", "1000").findFirst();
}

更新

public void update() {
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            Shop shop = realm.where(Shop.class).equalTo("id", "1000").findFirst();
            shop.setName("www");
        }
    });
}

相关文章

  • Android Realm数据库使用指南

    Android Realm数据库使用指南 Realm数据库, 目前有Java, Objective‑C, Reac...

  • Android 数据库编程

    Android 数据库编程 Realm 官方文档 https://realm.io/cn/docs/java/la...

  • Android Realm数据库配合aop框架封装

    Android Realm数据库配合aop框架封装 Realm数据库的使用,网上的介绍有很多,配置什么的这里就不写...

  • Realm遇上Kotlin

    相信用过Android Realm数据库的同学享受了Realm的强大的同时,也忍受了Realm事物操作的繁琐。例如...

  • Realm使用记录

    Realm简介 Realm是一个跨平台的移动数据库引擎,目前支持iOS、Android平台,同时支持Objecti...

  • Android数据库框架GreenDao 3.2.2

    android数据库框架主流开源的有:OrmLite、greenDAO 、Realm、DBFlow、LitePal...

  • Realm Objective-C 数据库操作

    今天研究了一下Realm数据库,觉得特别厉害哈。Realm支持iOS,OS X,Android,速度快,操作相对来...

  • 数据库框架Realm详解(一)

    Realm是一款数据库框架,在Android和iOS上都适用,github地址Realm官方文档 开始使用 使用前...

  • realm3.0简单使用

    前言 在android开发中,可供选择的数据库很多,如 greenDAO,Realm,ormlite-androi...

  • Realm的了解

    1>Realm架构 Realm是一个移动端数据库,专门针对移动APP设计,不仅适用于iOS,也适用于Android...

网友评论

      本文标题:Android数据库---Realm

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