当前位置: 首页 > 工具软件 > Stetho Realm > 使用案例 >

android端Realm数据库快速上手

宫晟
2023-12-01

下面我将介绍在Android Studio上快速使用Realm数据库

 

在你项目的build.gradle中:

  dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        //这里使用3.0.0版本,方便下面的stetho可查,不需要则可使用最高的realm版本
        classpath "io.realm:realm-gradle-plugin:3.0.0"
    }

 在你app的build.gradle中:
 apply plugin: 'realm-android'

 

//如果想直接查到你的realm数据库,需做如下配置

在你项目的build.gradle中:

repositories {

maven {

url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo'

            }

        }        

在你app的build.gradle中:

implementation 'com.facebook.stetho:stetho:1.5.0'
implementation 'com.uphyca:stetho_realm:2.1.0'

 

如上操作后则可使用谷歌浏览器输入此链接chrome://inspect/#devices,可以查到realm数据库中的数据

 

 

在Application的onCreate()方法中初始化Realm

//初始化Realm
private void initRealm() {
    Realm.init(this);
    RealmConfiguration config = new RealmConfiguration.Builder().name("myrealmsql.realm").deleteRealmIfMigrationNeeded().build();
    Realm.setDefaultConfiguration(config);

    Stetho.initialize(//Stetho初始化
            Stetho.newInitializerBuilder(this)
                    .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                    .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).build())
                    .build()
    );
}

 

数据库操作

打开数据库:

Realm mRealm=Realm.getDefaultInstance();

关闭数据库:

if (mRealm != null && !mRealm.isClosed()) { mRealm.close(); }

一.添加对象入数据库(增)

 

copyToRealmOrUpdate这个方法用来添加对象进数据库(适用于有主键的model),如果数据库中存在,则更新数据库

 

copyToRealm这个方法也是添加对象入数据库(适用于没有主键的model,有主键的model也可以使用这个方法),不能更新数据库只能创建,重复添加会报错(主键已存在的错误)

 

1.copyToRealm与copyToRealmOrUpdate:前者是给未指明主键的model使用的,后者则是给指明主键的model使用。

 

2.copyToRealm对应无主键参数的createObject,区别是copyToRealm会复用Realm缓存的model示例,不会每次都创建新的model实例。

 

3.copyToRealmOrUpdate对应有主键参数的createObject,区别是copyToRealmOrUpdate会复用Realm缓存的model示例,没有缓存实例就要去表中查询是否有匹配这个主键存在的记录,来决定是新建对象还是更新model实例。

 

二.删除对象(删)

先查到,再删

BeanDb db=selectSceneResult(id);

db.deleteFromRealm();

 

三.修改对象(改)

可以使用copyToRealmOrUpdate方法整条更新,只要主键KEY一样;

copyToRealmOrUpdate(db);

也可以逐条更新

先从数据库查出,再更新对象的字段

BeanDb db=selectImageResult(id);

mRealm.beginTransaction();

db.setName("Alvis");

mRealm.commitTransaction();

 

四.查询对象(查)

查询单条:根据主键查询(唯一的)

mRealm.where(BeanDb.class).equalTo("keyId",id).findFirst();

查询多条:根据条件查询(可能不是唯一的)

mRealm.where(BeanDb.class).equalTo("name",Alvis).findAll(); 返回的是一个数组可能多条;

注意:

Intent传递Realm对象,不能实现serializable接口,因为Realm的代理类未实现serializable接口。

解决办法:实现cloneable或者Parcelable接口

 

 类似资料: