gpt4 book ai didi

android - 房间数据库全动态查询

转载 作者:IT老高 更新时间:2023-10-28 13:46:25 26 4
gpt4 key购买 nike

我有带有对象硬币的房间数据库。

我想用参数做一个动态查询。

当我将参数用于值时,效果很好,如下所示:

@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>>

最佳答案

您不能使用绑定(bind)变量(参数)来引用 ORDER BY 子句中的列。但是,您可以像这样在表达式中使用绑定(bind)变量:

@Query("select * from coin ORDER BY
CASE :order
WHEN 'percent_change_24h' THEN percent_change_24h
WHEN 'other_column_name' THEN other_column_name
END asc limit :numberOfCoins")
fun getAllTop(order: String, numberOfCoins: Int): Flowable<List<CoinDB>>

您需要为要排序的每个列/表达式在 CASE 语句中添加一个单独的 WHEN 子句,并且您可能需要或想要为 :order 绑定(bind)变量不添加的情况添加一个 ELSE 子句匹配您的任何标准情况。

对绑定(bind)变量的限制也适用于 where 子句和投影(选择列表)。 Bind 变量在您的示例中具有自己的值,分别是 String 或 Int 用于 :order 和 :numberOfCoins。

关于android - 房间数据库全动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com