首页 > 解决方案 > 传入一个字符串以用作 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 似乎不希望我这样做。

标签: androidsqliteandroid-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,如果您想忽略其中一个类似的子句,只需传递一个空字符串


推荐阅读