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&lt;String&gt; ids 以及 String... idsSring[] 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 的情况下???示例:@Query("SELECT * FROM objects WHERE obj_id IN (:ids)") List queryObjects(List ids); @user2980181:我希望这能奏效,尽管我没有亲自尝试过这种特定的组合。 只是想知道,是否可以按id列表的顺序返回列表od Objects? @DanielSpiess:我不知道任何 SQLite SQL 语法。不过,我不能排除它。【参考方案2】:

您可以设置输入列表或输入数组。

然后进行这样的查询

例如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

Android Room框架学习笔记

Android Room Persistence Library - 如何查找 ID 列表中包含 ID 的实体?

Android Room 数据库 DAO 调试日志