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

构建Android项目时Room数据库报Invalid query argument错误求助

错误通用含义

该错误是Room在编译阶段做代码校验时抛出的异常,代表你给Room操作注解(@Query、@Delete、@Update等)传入的参数类型不符合规则,Room注解处理器无法识别该参数对应的数据库操作逻辑。

本次报错触发原因

问题出在Dao类的最后一个删除方法:

@Delete(entity = ParsedDatabase::class)
fun delete(id: Int = 1)

Room原生@Delete注解仅支持传入实体类对象或者实体类对象集合作为参数,内部会自动匹配传入实体的主键值来定位要删除的行。你直接传入Int类型的主键id,不符合@Delete的参数要求,因此触发了校验报错。

修复步骤

将上述按id删除的方法替换为@Query自定义SQL的写法即可,修改后代码如下:

// 删除原来的@Delete注解的对应方法,替换为以下代码
@Query("DELETE FROM parsed_database WHERE id = :id")
fun delete(id: Int = 1)
额外注意事项
  • 你在实体类中使用了HashMap、ArrayList、嵌套ArrayList等Room不支持直接存储的复杂类型,请确保你声明的Converters类型转换器已经正确实现了这些复杂类型和基础存储类型(如String、ByteArray)之间的序列化、反序列化逻辑,避免后续运行时出现类型转换错误。
  • 你的实体类主键id默认值固定为1,代表该表最多只会存储1条数据,若你的业务场景后续需要存储多条数据,请调整主键生成策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:01