Realm 是一个轻量级的 Android 数据库框架,支持数据迁移。以下是在 Android 中使用 Realm 进行数据迁移的步骤:
在项目的 build.gradle 文件中添加 Realm 的依赖项:
dependencies {
implementation 'io.realm:realm-android:6.0.0'
}
定义一个继承自 RealmObject 的类,用于表示数据库中的表结构。例如,我们创建一个 User 类:
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class User extends RealmObject {
@PrimaryKey
private int id;
private String name;
private int age;
// Getters and setters
}
在应用启动时,创建一个包含初始数据的 Realm 实例。例如,我们在 Application 类中创建一个静态实例:
import io.realm.Realm;
import io.realm.RealmConfiguration;
public class MyApplication extends Application {
public static Realm realmInstance;
@Override
public void onCreate() {
super.onCreate();
RealmConfiguration config = new RealmConfiguration.Builder()
.name("myDatabase.realm")
.schemaVersion(1)
.migration(new MyMigration())
.build();
realmInstance = Realm.getInstance(config);
}
}
创建一个实现 RealmMigration 接口的类,用于定义数据迁移策略。例如,我们创建一个 MyMigration 类:
import io.realm.DynamicRealm;
import io.realm.RealmMigration;
import io.realm.RealmSchema;
public class MyMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
// 添加新表
if (oldVersion < 2) {
schema.create("User", User.class);
}
// 修改现有表结构
if (oldVersion < 3) {
schema.get("User").addField("email", String.class);
}
}
@Override
public int hashCode() {
return getClass().hashCode();
}
@Override
public boolean equals(Object obj) {
return obj != null && getClass().equals(obj.getClass());
}
}
在这个例子中,我们添加了一个新表 User,并在 User 表中添加了一个 email 字段。
在应用启动时,打开数据库并执行迁移。例如,我们在 Application 类的 onCreate 方法中执行迁移:
@Override
public void onCreate() {
super.onCreate();
RealmConfiguration config = new RealmConfiguration.Builder()
.name("myDatabase.realm")
.schemaVersion(3)
.migration(new MyMigration())
.build();
realmInstance = Realm.getInstance(config);
}
现在,当应用启动时,Realm 会自动执行 MyMigration 类中定义的数据迁移策略。