发布时间:2025-12-09 11:53:31 浏览次数:1
Android Studio 1.5.1 或者更高版本; JDK 版本 >=7; 较新的 Android SDK 版本; 支持 Android API 9 以上的所有版本(Android 2.3 Gingerbread 及以上)。
Realm Java 让你能够高效地编写 app 的模型层代码,保证你的数据被安全、快速地存储。
A.在module的build.gradle中添加如下代码:
apply plugin: 'realm-android'如图所示:
1.png
B.在project的build.gradle中添加如下代码:
classpath "io.realm:realm-gradle-plugin:3.5.0"如图所示:
1.png
现在基本配置已经弄好了,可以开始操作一波了。
在做这些操作之前我们需要新建model类(类似sqlite的新建表),这里我们需要继承RealmObject才能被存储在数据库中。
public class Person extends RealmObject{ private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } 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; }}表已经建好了,这时候可以对它CRUD(create/read/update/delete)了。 a.新增数据 这里需要说一下,新增数据操作需要在事务进行。如下所示:
Realm mRealm = Realm.getDefaultInstance();//获取Realm实例 mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //Add a person Person person = realm.createObject(Person.class); person.setId(1); person.setName("Young Person"); person.setAge(14); } });或者
Realm mRealm = Realm.getDefaultInstance();//获取Realm实例 mRealm.beginTransaction(); //Add a person Person person = realm.createObject(Person.class); person.setId(1); person.setName("Young Person"); person.setAge(14); mRealm.commitTransaction();b.查询数据
Realm mRealm = Realm.getDefaultInstance();//获取Realm实例 final Person person = mRealm.where(Person.class).findFirst();//查询第一条数据相关查询API如下所示:1️⃣ average(String fieldName) ->返回给定字段的平均值2️⃣ beginGroup ->开始条件分组(“左括号”)3️⃣ beginsWith(String fieldName,String value) ->查询以“value”开头的“fieldName”4️⃣ between(String fieldName,float from,float to) ->查询fieldName字段在"from"和to之间好了,方法挺多的,这里就举几个例子,顺便给出Realm API网址(https://realm.io/docs/java/3.5.0/api/)有兴趣的可以去看一下。
c.更新数据
Realm mRealm = Realm.getDefaultInstance();//获取Realm实例 final Person person = mRealm.where(Person.class).findFirst();//查询第一条数据//更新第一条数据 mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { person.setName("Senior Person"); person.setAge(88); } });d.删除数据
Realm mRealm = Realm.getDefaultInstance();//获取Realm实例 mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //清空Person表 realm.delete(Person.class); } });所有数据库都要处理模型改变的情况。Realm 的数据模型用标准 Java 对象来定义,改变数据模型只需要改变数据对象定义即可。 Application中需要如下自定义配置:
// Initialize Realm. Should only be done once when the application starts. Realm.init(this); RealmConfiguration myConfig=new RealmConfiguration.Builder() .schemaVersion(REALM_VERSION) .migration(new MyConfigMigration()) .name("myrealm.realm") .build(); Realm.setDefaultConfiguration(myConfig);这时候我们需要自定义Migration
public class MyConfigMigration implements RealmMigration { public static final String TAG = "ez"; @Override public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { realmUpdate((int) oldVersion,realm); //官方写法// if (oldVersion == 0 && newVersion == 1) {// version1(realm);// ++oldVersion;// }//// if (oldVersion == 1 && newVersion == 2) {// version2(realm);// ++oldVersion;// } } /** * realm数据库迁移(升级) * 降级:需要使用if判断来处理 * @param oldVersion * @param realm */ private void realmUpdate(int oldVersion, DynamicRealm realm) { switch (oldVersion) { case 0: version1(realm); case 1: version2(realm); default: break; } } /** * version=1时,增加fullName,删除name。 * <p> * 注意:添加字段时,对应的model也要对应添加(如果标记的不为空,那么model也必须注解不为空),删除字段时,对应的model也要删除, * * @param realm */ private void version1(DynamicRealm realm) { RealmSchema schema = realm.getSchema(); RealmObjectSchema personSchema = schema.get("Person"); personSchema.addField("fullName", String.class, FieldAttribute.REQUIRED) .transform(new RealmObjectSchema.Function() { @Override public void apply(DynamicRealmObject obj) { obj.set("fullName", obj.get("name") + "Full"); } }) .removeField("name"); } /** * version=2时,增加了Pet类。 */ private void version2(final DynamicRealm realm) { RealmSchema schema = realm.getSchema(); //创建对应表和表字段 RealmObjectSchema petSchema = schema.create("Pet") .addField("name", String.class, FieldAttribute.REQUIRED) .addField("type", String.class, FieldAttribute.REQUIRED); //将创建的表添加到Person表中 schema.get("Person") .addRealmListField("pets", petSchema) .transform(new RealmObjectSchema.Function() { @Override public void apply(DynamicRealmObject obj) { if (obj.getString("fullName").equals("Senior PersonFull")) { DynamicRealmObject pet = realm.createObject("Pet"); pet.setString("name", "Jemos"); pet.setString("type", "cat"); obj.getList("pets").add(pet); } } }); }}当我们每次增加schemaVersion的值时,数据库就会走升级操作。 好了,上面就是Realm的基本用法。详细用法请参考官网: a、中文版(版本3.1.1)https://realm.io/cn/docs/java/latest/#migrations b、英文版(版本3.5.0)https://realm.io/docs/java/latest/ c、官方Realm使用Demo https://github.com/realm/realm-java