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

为何Room未使用预填充数据库?查询本该返回46条却得0条

问题排查与解决方案

1. 实体类未添加@Entity注解(最可能原因)

你的CRSTitle类缺少@Entity注解,Room无法识别这是数据库表对应的实体类,自然无法完成表与实体的映射,导致查询返回空结果。必须给实体类添加该注解,同时确保表名与预填充数据库中的实际表名完全匹配:

@Entity(tableName = "CRSTitle")
data class CRSTitle(
    @PrimaryKey val Z_PK: Int,
    val index: Long,
    val year: Int,
    val title_num_: String,
    val title_text_: String,
    val editors_note: String?,
    val source_note: String?,
    val xref_note: String?,
)

如果预填充数据库中的表名是小写(比如crstitle),需要同步修改tableName的值,SQLite默认大小写不敏感,但显式匹配能避免潜在问题。

2. 核对数据库版本一致性

你的Room数据库版本设置为version = 2,请用SQLite工具打开预填充数据库,执行PRAGMA user_version;查看其版本号:

  • 若预填充版本低于2,Room会尝试执行迁移,但你未定义迁移规则,Room会默认重建数据库(清空数据)。解决办法:要么将Room的version改为与预填充数据库一致,要么添加正确的迁移逻辑;
  • 若预填充版本高于2,Room会直接抛出异常,这种情况你应该能看到崩溃日志,可能性较低。

3. 确认资产文件路径正确性

createFromAsset(CRSApp.databaseName)中的路径必须与assets文件夹中的实际路径一致:

  • 若数据库文件直接放在assets/根目录,CRSApp.databaseName应为"Colorado_CRS.sqlite"(假设你的数据库文件名是这个);
  • 若放在assets/databases/子目录,路径需改为"databases/Colorado_CRS.sqlite"。
    虽然你看到数据库已复制到应用目录,但路径错误可能导致Room复制了空文件或错误文件(不过你提到打开复制后的文件有数据,这点大概率没问题,仍建议核对)。

4. 验证列名映射准确性

即使实体字段名与数据库列名看起来一致,也可能因大小写差异或关键字冲突导致映射失败。可以显式指定列名确保匹配:

@Entity(tableName = "CRSTitle")
data class CRSTitle(
    @PrimaryKey @ColumnInfo(name = "Z_PK") val Z_PK: Int,
    @ColumnInfo(name = "index") val index: Long, // index是SQLite关键字,显式指定更稳妥
    @ColumnInfo(name = "year") val year: Int,
    @ColumnInfo(name = "title_num_") val title_num_: String,
    @ColumnInfo(name = "title_text_") val title_text_: String,
    @ColumnInfo(name = "editors_note") val editors_note: String?,
    @ColumnInfo(name = "source_note") val source_note: String?,
    @ColumnInfo(name = "xref_note") val xref_note: String?,
)

5. 清除应用数据重新测试

旧的数据库文件残留可能导致Room未正确使用新的预填充数据库,你可以:

  • 进入设备应用设置,清除应用数据;
  • 卸载应用后重新安装,确保Room重新复制预填充数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:23:34