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

如何在Room中删除现有数据库并创建新数据库(无需版本迁移)

解决Room数据库修改实体后的完整性报错(直接重建数据库,无需迁移)

当修改Room实体模型后出现如下报错时:

Process: com.dam, PID: 13543
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dam/com.dam.MainActivity}: java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number. Expected identity hash: dba36cbdedaaee568c2a44d54d9a32cf, found: 90f7cc7852b9fac91086fc4d271e92d3

不想做版本迁移,直接删除旧库重建新库,有以下几种可行方案:

方案一:使用Room官方提供的破坏性回退方法(推荐)

在构建RoomDatabase实例时,添加fallbackToDestructiveMigration()配置,Room会自动检测到schema不匹配或版本冲突,删除旧数据库并创建新的。

示例代码(Kotlin):

val appDatabase = Room.databaseBuilder(
    applicationContext,
    AppDatabase::class.java, "your-database-name" // 替换为你的数据库名称
)
    .fallbackToDestructiveMigration()
    .build()

如果仅针对特定旧版本需要破坏性重建,可使用fallbackToDestructiveMigrationFrom(旧版本号)指定具体版本,避免误操作。

方案二:手动清除App数据(测试阶段适用)

在手机系统设置中操作:

  • 进入「设置」→「应用管理」→ 找到你的应用 →「存储」→ 点击「清除数据」或「清除存储」
    此操作会直接删除App所有本地存储数据,包括目标数据库。

方案三:代码手动删除数据库文件

在初始化Room数据库之前,调用deleteDatabase()方法删除旧数据库文件:

示例代码(Kotlin):

// 在Application的onCreate或启动页执行
applicationContext.deleteDatabase("your-database-name")

// 之后再初始化Room数据库
val appDatabase = Room.databaseBuilder(...)
    .build()

内容的提问来源于stack exchange,提问作者JiaCheng Zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:42:11