我有对象硬币的房间数据库 .
我想用参数进行动态查询 .
当我使用参数作为值时,它的效果很好,如下所示:
@Query("select * from coin ORDER BY percent_change_24h asc limit :numberOfCoins")
fun getAllTop(numberOfCoins: Int): Flowable<List<CoinDB>>
但是当我想为WHERE子句使用参数时,这不起作用 . 这是我的查询:
@Query("select * from coin ORDER BY :order asc limit :numberOfCoins")
fun getAllTop(order: String, numberOfCoins: Int): Flowable<List<CoinDB>>
我称之为:
AppDatabase.getInstance(this).coinDao().getAllTop("percent_change_24h",5)
使用隐式WHERE子句调用相同的查询工作正常(像这样:)
@Query("select * from coin ORDER BY percent_change_24h asc limit :numberOfCoins")
fun getAllTop(order: String, numberOfCoins: Int): Flowable<List<CoinDB>>
2 回答
您不能使用绑定变量(参数)来引用ORDER BY子句中的列 . 但是,您可以在表达式中使用bind变量,如下所示:
对于要排序的每个列/表达式,您需要为CASE语句添加单独的WHEN子句,并且您可能需要或想要为以下情况添加ELSE子句:order bind变量不匹配任何你的标准案例 .
绑定变量的限制也适用于where子句和投影(选择列表) . 绑定变量在您的示例中具有自己的值,分别为String或Int:order和:numberOfCoins .
以下是kotlin语言中关于值如何完全动态的示例,
这里的test是tableName,testId是应用WHERE子句的字段,testId是传递给函数loadTestById()的参数,返回类型是名为Test的数据模型类 .