android - 传入一个字符串以用作 Room 查询的一部分
问题描述
为什么这在房间里不起作用?:
val dataSourceFactory =
database.gameDao.getGames("Game.platforms LIKE '%XONE%'")
@Query("SELECT * FROM Game WHERE :likeClause")
fun getGames(likeClause: String): DataSource.Factory<Int, Game>
但这可以吗?:
@Query("SELECT * FROM Game WHERE Game.platforms LIKE '%XONE%'")
fun getGames(): DataSource.Factory<Int, Game>
有什么方法可以传入一个可以作为查询一部分的字符串?
编辑:我知道这不是形成单个 LIKE 子句的正确方法,但我实际上是在尝试传入多个 LIKE 子句。所以我想要一种将文本直接注入查询的方法,但 Room 似乎不希望我这样做。
解决方案
您在谈论动态 SQL,我认为这在空间上是不可能的。什么会起作用
@Query("SELECT * FROM Game WHERE Game.platforms LIKE :likeClause1 AND Game.publisher LIKE :likeClause2")
fun getGames(likeClause1: String, likeClause2: String): DataSource.Factory<Int, Game>
并且您可以根据需要使用AND
或使用OR
,如果您想忽略其中一个类似的子句,只需传递一个空字符串
推荐阅读
- android - android studio 为什么我不能正常调试项目?
- haskell - 如何在 Haskell 中为 ByteString 编写 ToDhall 实例?
- javascript - HTML 按钮未显示
- python - 错误:“Var”对象在 Groubi 中不可下标。我应该怎么做
- c# - EnvironmentVariablesConfigurationProvider 从哪里获取它的键值对?
- rust - 类型别名引入错误:“cast 要求为 `'static` 借用 `*variable*`”
- android - 如何从 Windows QtCreator 为 Android 创建一个共享库
- database - Laravel 检查 Gmail 是否存在,但包含“.”、“+”等字符
- python - Python - 选择一天中每个小时都有数据的所有行
- javascript - nodejs express.js 无法获取 /1.jpg 错误