问题 如何将现有的SQLite应用程序迁移到Room Persistance Library?


提问可能有点早,但是有可能以及如何将现有的SQLite数据库应用程序迁移/升级到新的Android Room Persistance Library吗?


3166
2018-05-20 02:11


起源



答案:


假设您的房间实体与您当前的表模式匹配,您可以继续使用相同的数据库/表。

Room管理在创建或升级数据库时初始化的主表,因此您需要增加数据库版本并提供虚拟迁移:

@Database(entities = SomeEntity.class, version = EXISTING_VERSION + 1)
public class MyDatabase extends RoomDatabase {
    // ...
}

MyDatabase db = Room.databaseBuilder(context, MyDatabase.class, "db_name")
                    .addMigrations(new Migration(EXISTING_VERSION, EXISTING_VERSION + 1) {
                        @Override
                        public void migrate(SupportSQLiteDatabase database) {
                            // NOOP
                        }
                    }).build();

13
2018-05-22 20:01



尚未测试它,但我会将其标记为答案,因为数据库名称参数可能允许您使用任何以前和现有的数据库。 - Marko Gajić
你知道一种测试这种迁移的方法吗?我看了看 developer.android.com/topic/libraries/architecture/... 但我不确定如何测试从现有sqlite到房间的迁移。 - AdamMc331


答案:


假设您的房间实体与您当前的表模式匹配,您可以继续使用相同的数据库/表。

Room管理在创建或升级数据库时初始化的主表,因此您需要增加数据库版本并提供虚拟迁移:

@Database(entities = SomeEntity.class, version = EXISTING_VERSION + 1)
public class MyDatabase extends RoomDatabase {
    // ...
}

MyDatabase db = Room.databaseBuilder(context, MyDatabase.class, "db_name")
                    .addMigrations(new Migration(EXISTING_VERSION, EXISTING_VERSION + 1) {
                        @Override
                        public void migrate(SupportSQLiteDatabase database) {
                            // NOOP
                        }
                    }).build();

13
2018-05-22 20:01



尚未测试它,但我会将其标记为答案,因为数据库名称参数可能允许您使用任何以前和现有的数据库。 - Marko Gajić
你知道一种测试这种迁移的方法吗?我看了看 developer.android.com/topic/libraries/architecture/... 但我不确定如何测试从现有sqlite到房间的迁移。 - AdamMc331