Realm数据库的使用

本文详细介绍了Realm数据库在Android应用中的使用,包括数据模型、事务、引用计数、数据库迁移等关键概念。Realm提供了高效的数据操作,支持同步和异步事务,允许在事务中进行增删改查。此外,文章还讲解了如何处理数据库迁移,确保在模型或字段变化时数据的平滑过渡。最后,强调了在不使用时关闭数据库连接的重要性。
摘要由CSDN通过智能技术生成

写在前面

Realm数据库不同于SQLite,两者可以说是同级的,为什么选择Realm数据库?Android目前流行三方数据库ORM分析及对比。我个人觉得最主要的是两点:1. 访问快,直接操作底层数据;2. 支持跨平台。什么是ORM? object relation model,对象关系映射模型,就是通过使用描述对象和数据库之间映射的元数据,来实现面向对象语言程序中的对象与关系数据库中数据的映射。简单来说,就是一个类对应数据库中的表,一个属性对应数据库中的一列,一个类的对象对应数据库中的一条记录。 参考。基于ORM技术的框架称为ORM框架,它使得使用者更容易理解和操作数据库,但是由于中间需要转换,所以性能上比直接使用SQL语句要慢,另外还需要保存数据对应的类,所以需要更多的内存。

简单使用

RealmGitHube 或者 官网

几个概念
1. 数据模型
  • 一个模型(java中的一个类)表示数据库中的一张表,模型中的字段表示表中的列
  • 模型需要继承RealmObject类
  • 模型实时、自动更新(需要获得当前线程的looper,在主线程中是满足的);操作模型就相当于直接操作数据库中底层数据
2. 事务
  • 所有会使数据发生变化 的操作必须在事务中进行。如:增、删、改
  • 事务分为同步事务和异步事务两种
3. 引用计数
  • Realm实例使用引用计数的方式
  • 生成的Realm实例在使用完后需要手动close。
4. 数据库的迁移

在Realm中如果增加、删除了模型或者模型的字段,需要进行数据库的迁移。这个概念类似于数据库的升级。

添加配置文件
  1. 在project的build.gradle文件中调加依赖
buildscript {
   
    repositories {
   
        jcenter()
    }
    dependencies {
   
        classpath "io.realm:realm-gradle-plugin:5.12.0"
    }
}
  1. 在app下的build.gradle文件顶部添加对应的插件支持
apply plugin: 'realm-android'
初始化Realm并配置Realm
1. 在application的onCreate()中使用Realm.init()初始化
2. 在application的onCreate()中对Realm进行相关的配置

配置不是必须的,如果不配置,会使用默认配置;但是如果有数据库的迁移,那么是需要配置数据库的。

  1. 使用默认配置

有两种方式可以使用默认配置:

//方式1:
// Get a Realm instance for this thread
Realm realm = Realm.getDefaultInstance();

这样得到的Realm实例使用的就是默认的配置。

//方式二
RealmConfiguration config = new RealmConfiguration.Builder().build();
Realm.setDefaultConfiguration(conf);

默认配置的话,会得到一个名为default.realm数据库,数据库保存地址:data/data/包名/files/default.realm

  1. 自定义配置
// The Realm file will be located in Context.getFilesDir() with name "myrealm.realm"
RealmConfiguration config = new RealmConfiguration.Builder()
  .name("myrealm.realm")
  .encryptionKey(getKey()) //设置密钥
  .schemaVersion(42)  //版本号
  .modules(new MySchemaModule())
  .migration(new MyMigration()) //数据库迁移
  .build();
// Use the config
Realm realm = Realm.getInstance(config);
3. Realm使用完了之后要关闭

一般在activity.onDestroy()中关闭,或者在finally语句块中关闭

try {
   
        // ... Use the Realm instance ...
    } finally {
   
        realm.close();
    }
创建模型

一般来说都是写一个类继承RealmObject

public class User extends RealmObject {
   

    private String          name;
    private int             age;

    @Ignore
    private int             sessionId;

    // Standard getters & setters generated by your IDE…
    public String getName() {
    return name; }
    public void   setName(String name) {
    this.name = name; }
    public int    getAge() {
    return age; }
    public void   setAge(int age) {
    this.age = age; }
    public int    getSessionId() {
    return sessionId; }
    public void   setSessionId(int sessionId) {
    this.sessionId = sessionId
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值