预打包数据库FTS表Schema不匹配致Room报错问题求助
解决Room预打包数据库FTS表Schema不匹配问题
这个错误的根源很明确:Room期望FTS表的content选项使用反引号包裹表名(content=entries``),但你的预打包数据库里实际用的是单引号(content='entries'),两者的字符串形式不一致,导致Room的Schema校验严格失败。
解决步骤
修改你的WordMinimal实体的@Fts4注解,手动指定content选项为单引号形式,替代默认的反引号生成逻辑:
@Entity(tableName = "entriesFts") @Fts4(options = "content='entries'") data class WordMinimal ( @PrimaryKey @ColumnInfo(name = "rowid") val id :Int, @ColumnInfo val word :String )
为什么这样能解决问题?
当你使用contentEntity = Word::class时,Room会自动生成content=entries``的选项(用反引号包裹表名),但你通过sqlite3创建的FTS表用的是单引号语法。Room的Schema校验是完全匹配字符串内容的,哪怕只是引号类型不同,也会判定为Schema不兼容。
通过options参数手动指定content='entries',就能让Room的预期Schema和你预打包数据库里的实际Schema完全对齐,从而绕过这个校验错误。
额外确认
检查你的Word实体和entries表的Schema已经完全匹配(从你的代码看这部分没问题),之后重新编译运行,这个IllegalStateException就会消失了。
内容的提问来源于stack exchange,提问作者Quanta
相关产品推荐
相关产品推荐

