Realm 是一个轻量级的 Android 数据库框架,支持数据迁移。以下是在 Android 中使用 Realm 进行数据迁移的步骤:
- 添加 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 类中定义的数据迁移策略。