【问题标题】:How to handle old versions of Room Database or how to mange fallback for specific versions如何处理旧版本的房间数据库或如何管理特定版本的回退
【发布时间】:2021-01-06 19:30:49
【问题描述】:

我们如何管理旧的数据库版本。
例如version = 1 version= 2都是我的旧版本,当前版本=10。 版本 9,10 的更改太多。
在这种情况下,如果更新到 version=,我想清除 版本 1,2 的数据库9 或 10



我们如何为特定版本编写回退代码?

【问题讨论】:

    标签: android kotlin android-room database-migration fallback


    【解决方案1】:

    为了管理特定版本或所有版本的后备,Room 有一些方法可以管理后备。

    1- fallbackToDestructiveMigrationFrom(int versions...)

    • 允许从特定的破坏性地重新创建数据库表

    • 开始架构版本。

    • 此功能与提供的功能相同

    • {@link #fallbackToDestructiveMigration()},除了这个方法允许

    • 允许破坏性重建的一组模式版本的规范。

    • 如果需要,使用此方法优于 {@link #fallbackToDestructiveMigration()}

    • 允许从某些架构版本进行破坏性迁移,同时仍能利用

    • 由于无意丢失迁移而引发的异常。

    • 注意:传递给此方法的任何版本都不能作为开始或结束存在

    • 提供给 {@link #addMigrations(Migration...)} 的 {@link Migration} 中的版本。如果一个

    • 传递给此方法的版本在迁移中作为起始或结束版本找到,

    • 会抛出异常。

         instance = Room.databaseBuilder(context, DbHelper.class, "DatabaseName")
                    .addMigrations(MIGRATION_4_5,MIGRATION_5_6)
                    .fallbackToDestructiveMigrationFrom(1,2,3)
                    .addCallback(new Callback() {
                        @Override
                        public void onCreate(@NonNull SupportSQLiteDatabase db) {
                            super.onCreate(db);
                            try {
      
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }).build();
      

    2- fallbackToDestructiveMigration()

    • 允许 Room 破坏性地重新创建数据库表,如果 {@link Migration} 会这样做
    • 未找到将旧数据库架构迁移到最新架构版本。
    • 当设备上的数据库版本与最新架构版本不匹配时,Room
    • 在数据库上运行必要的 {@link Migration}。
    • 如果找不到将数据库带到
    • 当前版本,它会抛出一个 {@link IllegalStateException}。
    • 您可以调用此方法来更改此行为以重新创建数据库,而不是 崩溃。
    • 如果数据库是从资产或文件创建的,Room 将尝试使用相同的
    • 文件重新创建数据库,否则这将删除所有数据在
    • 由 Room 管理的数据库表。
    
         instance = Room.databaseBuilder(context, DbHelper.class, "DatabaseName")
                        .fallbackToDestructiveMigration()
                        .addCallback(new Callback() {
                            @Override
                            public void onCreate(@NonNull SupportSQLiteDatabase db) {
                                super.onCreate(db);
                                try {
                                  
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }).build();
    

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 2015-05-08
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多