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

使用Room时部分API级别出现SQLiteException空列错误

问题分析与解决

根因

崩溃的核心原因是Android Oreo(API 26)搭载的SQLite版本(3.19.4)无法将TRUE识别为布尔字面量,会将其当作列名处理。而你的PlantView查询中使用了TRUE,导致SQLite找不到名为TRUE的列,触发SQLiteException。更高版本的Android(如API 30)使用了更新的SQLite版本,已经支持将TRUE作为布尔字面量解析,因此不会出现问题。

解决方案

  1. 修改Room的PlantView定义:将查询中所有的TRUE替换为1(SQLite用整数1表示真,0表示假,兼容所有版本)。
    示例修改:

    // 原定义
    @DatabaseView("SELECT common_name, plantId, image_path, latin_name, language FROM PlantView ORDER BY common_name, TRUE")
    data class PlantView(...)
    
    // 修改后
    @DatabaseView("SELECT common_name, plantId, image_path, latin_name, language FROM PlantView ORDER BY common_name, 1")
    data class PlantView(...)
    
  2. 更新资产中的预构建数据库:由于你通过createFromAsset加载预存数据库,需要手动修改该数据库文件中的PlantView视图定义,同样将TRUE替换为1,确保与Room的实体定义一致。

  3. 清理并重建项目:修改Room注解后,需执行Clean Project和Rebuild Project操作,让Room重新生成DAO实现类,避免旧代码残留。

验证

重新在API 26设备/虚拟机上测试应用,确认崩溃不再发生。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:15:20