【问题标题】:How to migrate existing SQLite application to Room Persistance Library?如何将现有的 SQLite 应用程序迁移到 Room Persistence Library?
【发布时间】:2017-10-20 05:52:58
【问题描述】:

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

【问题讨论】:

    标签: android database sqlite orm android-room


    【解决方案1】:

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

    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();
    

    【讨论】:

    • 尚未测试,但我会将其标记为答案,因为数据库名称参数可能允许您使用任何以前的和已经存在的数据库。
    • 您知道测试此迁移的方法吗?我查看了developer.android.com/topic/libraries/architecture/…,但我不确定如何测试从现有 sqlite 迁移到房间。
    • @Gubbel 如果我使用上面的虚拟迁移,我可以将所有现有的 SQLite 查询保留在现有的 SQLite 数据库类中,还是我还需要以某种方式迁移它们?
    【解决方案2】:

    如果您想知道是否有任何方法可以从SQLite 迁移到Room,即使您的架构不匹配,答案是,您可以从SQLite 迁移即使架构不匹配,也要腾出空间。

    这是可能的,但需要非常小心的转换。由于该过程需要涵盖很多步骤,因此我将留下您可以遵循的参考。

    Incrementally migrate from SQLite to Room

    希望对一些人有所帮助。

    【讨论】:

    • @unexplored 删除了重复链接。我找不到旧链接,可能它已被删除
    猜你喜欢
    • 2018-06-19
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多