Android Room Persistence Library - 如何查找 ID 列表中包含 ID 的实体?
Posted
技术标签:
【中文标题】Android Room Persistence Library - 如何查找 ID 列表中包含 ID 的实体?【英文标题】:Android Room Persistence Library - How to find entities with ids contained in list of ids? 【发布时间】:2018-06-30 09:40:37 【问题描述】:我正在尝试在我的 DAO 中执行以下查询。
@Query("SELECT * FROM objects WHERE obj_id IN :ids")
List<Object> queryObjects(List<String> ids);
它给了我这个编译时错误:
Error: no viable alternative at input 'SELECT * FROM objects WHERE obj_id IN :ids'
List<String> ids
以及 String... ids
和 Sring[] ids
都不起作用。但是,由于我不知道在编译时会有多少个 id,因此我需要一个列表/数组而不是可变参数。
我怎样才能使这个 SQL 查询工作?
【问题讨论】:
试试String[]
。
没用:/。实际上我再次测试,甚至 String... (vararg) 都没有工作。我认为之前发生了一些奇怪的事情,并且以某种方式编译了。
@YCF_L,nativeQuery
是什么意思?我没有找到与 Room Persistence Library 相关的类似内容
我认为你在使用 spring 是我的错
【参考方案1】:
你需要括号:
@Query("SELECT * FROM objects WHERE obj_id IN (:ids)")
List<Object> queryObjects(List<String> ids);
(和 FWIW,我提交了 an issue 以尝试在此处获得更好的错误消息)
【讨论】:
这个链接会改善你的回答希望你能接受Passing a collection of arguments 它能正常工作吗?在 List您可以设置输入列表或输入数组。
然后进行这样的查询
例如String[] ids 或 List ids
Query = @Query("select * from objects where obj_id in (:ids)")
【讨论】:
以上是关于Android Room Persistence Library - 如何查找 ID 列表中包含 ID 的实体?的主要内容,如果未能解决你的问题,请参考以下文章
从 SQLite 迁移到 Android Room Persistence Library
Android Persistence room:“无法弄清楚如何从光标读取此字段”
如何使用 Android Room Persistence Library 将 Column 注释为 NOT NULL