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

使用预填充Room数据库时应用崩溃:Schema不匹配问题求助

解决Room预填充数据库Schema不匹配问题

直接看崩溃日志里的Expected和Found表结构对比,就能定位问题:

  • 预期字段为**categories**(复数)
  • 预填充数据库实际字段为**category**(单数)

字段名称差了一个s,导致Room判定Schema不匹配,触发崩溃。

两种修复方案任选其一:

方案1:修改Entity类,对齐预填充数据库字段名

把Book实体里的categories字段改成category:

@Entity(tableName = "Book")
data class Book(
    @PrimaryKey(autoGenerate = true) val id: Int,
    @ColumnInfo val idImage: Int,
    @ColumnInfo val title: String,
    @ColumnInfo val author: String,
    @ColumnInfo val category: String, // 此处修改为category
    @ColumnInfo val rating: Double,
    @ColumnInfo val discount: Int,
    @ColumnInfo val price: Double,
    @ColumnInfo val synopsis: String
)

方案2:修改预填充数据库的表结构,对齐Entity字段名

更新SQL脚本里的字段名,把category改成categories,重新生成数据库文件后替换assets/database/bookDatabase.db:

CREATE TABLE "Book" (
    "id"    INTEGER NOT NULL,
    "idImage"   INTEGER NOT NULL,
    "title" TEXT NOT NULL,
    "author"    TEXT NOT NULL,
    "categories"  TEXT NOT NULL, -- 此处修改为categories
    "rating"    REAL NOT NULL,
    "discount"  INTEGER NOT NULL,
    "price" REAL NOT NULL,
    "synopsis"  TEXT NOT NULL,
    PRIMARY KEY("id" AUTOINCREMENT)
);

额外注意事项

  • 修改后清理应用缓存数据再重新运行,避免旧数据库残留干扰
  • 后续维护需严格保证Room实体类和预填充数据库的字段名、数据类型、约束(如NOT NULL)、主键设置完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:14:52