android - 房间 - 选择带有 IN 条件的查询?

标签 android sqlite select android-room sql-in

是否可以使用 SQLite 的 IN房间条件如何?

我正在尝试从我的数据库中选择一个项目列表,其中某个列的值(在本例中为 TEXT 列)与一组过滤器值中的任何一个匹配。据我所知,这在 SQL 和 SQLite 中很容易完成,只需添加 IN条件您的SELECT声明(see here)。但是,我似乎无法让它与 Room 一起使用。

我不断收到此错误:

Error:(70, 25) error: no viable alternative at input 'SELECT * FROM Table WHERE column IN :filterValues'

(DAO 的输入为 @Query -annotated 方法称为 filterValues)

我现在尝试了三种不同的方法:

  1. 将参数作为 List<String> 传递
  2. 将参数作为 String[] 传递
  3. 最后将参数简单地传递为 String , 但格式为 (value_1, value_2, ..., value_n)

最后一个应该很容易工作,因为它将(或至少应该)直接转换为 SELECT * FROM Table WHERE column IN (value_1, value_2, ..., value_n) ,这是您手动写出 SELECT 的确切方式如果您只是直接访问数据库。

最佳答案

所以当我准备提交这个问题时,我仔细检查了一堆我之前查过的东西,发现我不知何故错过了一些东西,并且可以避免这个问题的必要性。

事实证明,这两个选项:

  1. 将参数作为 List<String> 传递
  2. 将参数作为 String[] 传递

是可行的(您可以将 String 替换为数据库可以表示的任何类型,例如 charint ),您只需更改 @Query 中的语法来自此的注释:

@Query("SELECT * FROM Table WHERE column IN :filterValues")

到这里:

@Query("SELECT * FROM Table WHERE column IN (:filterValues)")

很容易,对吧?

请注意,Room 似乎不支持上面的第三种方法(将参数简单地传递为 String ,但格式化为 (value_1, value_2, ..., value_n) ),但这可能不是一件坏事,因为这是一种艰难的方式。

由于我已经输入了整个内容,我想我会留下这个问题,以防其他人像我一样难以找到这个解决方案并偶然发现这个问题。

关于android - 房间 - 选择带有 IN 条件的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406228/

相关文章:

java - 从数据库列填充 ListView 而不重复值

android - Kotlin:如何使用扩展功能延迟运行功能

android - 钛合金中的 SQLite 更新查询

sql - 没有指定排序依据时,SELECT TOP如何工作?

mysql - sql中的求和语句

android - onTouchEvent 到布局内的布局

android - TWA 和外部链接

python - sqlalchemy postgresql 其中 int = 字符串

python - 在 Python 字典和 SQLite 之间切换

javascript - Select2 使用 jquery 隐藏选项