You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅新增表时Room数据库自动迁移方案咨询

如何让Room自动生成新增实体的迁移脚本

当然可以!完全不用手动去扒Room生成的SQL语句——Room从2.4.0版本开始提供了**自动迁移(AutoMigration)**功能,专门解决这种新增实体、不改动原有表的简单迁移场景,甚至很多中等复杂度的迁移也能自动处理。

下面分两种场景给你讲具体实现方式:

一、快速解决你的场景:用@AutoMigration注解

你的需求是新增Pet实体、升级版本到2且不修改User表,这种场景完全适合AutoMigration,步骤超简单:

  1. 确保Room版本≥2.4.0
    先检查你的Module级build.gradle(或build.gradle.kts)里的Room依赖版本,至少要2.4.0以上:

    dependencies {
        implementation "androidx.room:room-runtime:2.6.1"
        annotationProcessor "androidx.room:room-compiler:2.6.1"
        // Kotlin项目用kapt代替annotationProcessor:
        // kapt "androidx.room:room-compiler:2.6.1"
    }
    
  2. 配置Schema保存路径
    Room需要对比不同版本的数据库结构来生成迁移,所以必须开启schema保存。在Module的build.gradle里添加:

    android {
        defaultConfig {
            // ...其他配置
            javaCompileOptions {
                annotationProcessorOptions {
                    arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
                }
            }
        }
    }
    

    这个配置会让Room把每个版本的数据库结构(schema)以JSON文件的形式保存在项目根目录的schemas文件夹里。

  3. 修改AppDatabase的注解
    给@Database注解加上autoMigrations参数,指定从版本1升级到2:

    @Database(
        entities = {User.class, Pet.class},
        version = 2,
        autoMigrations = {
            @AutoMigration(from = 1, to = 2)
        }
    )
    abstract class AppDatabase extends RoomDatabase {
        public abstract Dao getDao();
    }
    
  4. 编译项目
    执行Build -> Make Project(或用命令行./gradlew compileDebugJavaWithJavac),Room会自动生成对应的迁移逻辑,你完全不用手动写execSQL语句!之后创建数据库实例时,直接正常构建即可:

    AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app-db")
        .build();
    

二、更复杂场景:手动使用Room生成的迁移代码

如果之后遇到AutoMigration无法处理的复杂迁移(比如修改列名、删除列),你也可以让Room帮你生成基础的迁移代码,步骤如下:

  1. 按照上面的步骤配置好schemaLocation并编译项目。
  2. 打开项目的build/generated/source/annotationProcessor/debug(Kotlin项目是kapt/debug)目录,找到Room生成的包含迁移逻辑的类(通常命名类似AppDatabase_Migrations)。
  3. 里面会有对应版本升级的Migration实现,你可以直接复制出来使用,或者参考它生成的SQL语句来调整。

注意事项

  • AutoMigration支持的场景包括:新增实体(新增表)、给现有表新增可空列、新增带默认值的非空列、修改列的默认值等。如果是更复杂的操作(比如删除列、修改列类型),还是需要手动编写迁移逻辑,但可以参考Room生成的SQL来减少工作量。
  • 一定要保留schemas文件夹里的JSON文件,这些文件是Room生成迁移的依据,最好提交到版本控制系统中。

内容的提问来源于stack exchange,提问作者Piotr Aleksander Chmielowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:07:40