使用预填充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
相关产品推荐
相关产品推荐

