Android 开发 Room 数据库升级问题:A migration from 6 to 7 was required but not found.

  • 在 Android 开发中,使用 Room 时,出现如下错误信息

    java.lang.IllegalStateException:
    A migration from 6 to 7 was required but not found.
    Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.

    解读

    java.lang.IllegalStateException:
    需要从版本 6 到版本 7 的迁移策略,但未找到
    请通过 RoomDatabase.Builder.addMigration(Migration ...) 提供必要的迁移路径
    或者通过 RoomDatabase.Builder.fallbackToDestructiveMigration* 方法之一允许破坏性迁移

问题原因
  • 使用 Room 将数据库从版本 6 升级到版本 7,但没有提供对应的迁移策略
处理策略
  1. 通过 addMigration 方法提供必要的迁移策略(推荐)
java 复制代码
private static final Migration MIGRATION_6_7 = new Migration(6, 7) {

    @Override
    public void migrate(@NonNull SupportSQLiteDatabase database) {
        
        ...

    }
};
java 复制代码
MyDatabase myDatabase = Room.databaseBuilder(MyApplication.getContext(), MyDatabase.class, DATABASE_NAME)
        .addMigrations(MIGRATION_1_2)
        .addMigrations(MIGRATION_2_3)
        .addMigrations(MIGRATION_3_4)
        .addMigrations(MIGRATION_4_5)
        .addMigrations(MIGRATION_5_6)
        .addMigrations(MIGRATION_6_7)
        .build();
  1. 通过 fallbackToDestructiveMigration 方法允许破坏性迁移(不推荐)
java 复制代码
MyDatabase myDatabase = Room.databaseBuilder(MyApplication.getContext(), MyDatabase.class, DATABASE_NAME)
      .fallbackToDestructiveMigration()
      .build();
相关推荐
Wang's Blog24 分钟前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
前端 贾公子39 分钟前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
CoderYanger1 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
思想觉悟1 小时前
SEAndroid实战
android·linux·c++
一条泥憨鱼1 小时前
【Kafka】零基础学习教程
java·分布式·学习·kafka
思想觉悟1 小时前
Aosp开发磨刀石之ADB速查
android·c++
Wang's Blog1 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
文丑颜不良啊1 小时前
LeetCode1501~1520题目解析
java·leetcode
长不大的杨瑞杰2 小时前
OpenCode v2 LSP 实战:内置语言服务器、自定义配置与诊断闭环
java·人工智能·typescript·lsp·opencode
云和数据.ChenGuang2 小时前
python和java的try
java·开发语言·python