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

Android Room新增数据表是否需要编写迁移?Room可自动处理吗?

Room新增数据表场景下的迁移规则

新增数据表不是必须手动编写Migration迁移逻辑,高版本Room可以自动完成该场景下的版本适配,但有明确的适用前提。

自动适配的适用场景

  • 仅当你使用的Room版本为2.4.0及以上,且本次升级仅做「新增独立数据表」这一项操作,没有涉及原有表的重命名、字段增删改、表删除、数据转换等其他结构变更时,可以完全依赖Room的自动迁移能力,不需要手写SQL逻辑。
  • 配置步骤非常简单:
    1. 将数据库的version号在原有基础上加1
    2. 把新增表对应的实体类加到@Database注解的entities数组中
    3. 在@Database的autoMigrations参数中声明版本跨度的自动迁移规则,示例代码如下:
// 旧版本version=1,entities只包含原有业务表
@Database(
    version = 2,
    entities = [OriginalBizEntity::class, NewTableEntity::class],
    autoMigrations = [AutoMigration(from = 1, to = 2)]
)
abstract class AppDatabase : RoomDatabase() {
    // 数据库相关业务逻辑
}

配置完成后Room会在APP首次启动升级时,自动根据新实体类的注解信息生成建表SQL执行,原有表内的所有数据都不会被改动。

需要手动编写Migration的场景

  • 如果你使用的Room版本低于2.4.0:该版本还未推出自动迁移能力,必须手动实现Migration类,在migrate方法中编写新增表的CREATE TABLE语句,再通过addMigrations()方法把自定义迁移逻辑加入数据库配置。
  • 如果你使用2.4.0及以上版本,但本次升级除了新增表之外,还包含其他Room无法自动推断的结构变更(比如重命名原有表/字段、删除字段、需要做特殊的数据格式转换),这时候要么通过AutoMigrationSpec给自动迁移补充特殊逻辑,要么直接手写完整的Migration实现。

注意:不要为了省迁移逻辑直接调用fallbackToDestructiveMigration()方法,该配置会在数据库版本升级时直接删除所有旧表重建,会导致用户本地存储的所有业务数据被清空,正式上线版本严禁随意开启该配置。

内容的提问来源于stack exchange,提问作者Artyom Danilin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:30:43