【发布时间】:2020-07-18 05:07:25
【问题描述】:
我有一个 Room 数据库,使用 Dao 来处理查询等。我正在使用静态(非实时数据)函数通过查询检索结果,当我手动硬编码 Order By 值和列时,一切正常,如下所示,但是将参数传递给 Dao 进行排序时,Order By 恢复为默认值(按 id 列排序)并且不会根据传递的排序参数检索结果
硬编码的 Dao 示例 作品,结果按 ASC 或 DESC 排序
@Query("SELECT * FROM cameras WHERE suburb LIKE '%' || :suburb || '%' AND postcode LIKE '%' || :postcode || '%' ORDER BY direction ASC LIMIT :limit OFFSET :offset ")
fun getCamerasViaStatic(suburb: String?, postcode: String?, limit: Int?, offset: Int?): List<CamerasModel>
//and results retrieved in fragment using
CamerasApplicationDatabase.getInstance(context!!).CamerasDao().getCamerasViaStatic("", "", limit, offset)
Sort Param 传递给 Dao 示例 不行,默认排序的结果排序
@Query("SELECT * FROM cameras WHERE suburb LIKE '%' || :suburb || '%' AND postcode LIKE '%' || :postcode || '%' ORDER BY :sort_by ASC LIMIT :limit OFFSET :offset ")
fun getCamerasViaStatic(suburb: String?, postcode: String?, limit: Int?, offset: Int?, sort_by: String): List<CamerasModel>
//and results retrieved in fragment using
var sort_by = "my_column_to_sort_by"
CamerasApplicationDatabase.getInstance(context!!).CamerasDao().getCamerasViaStatic("", "", limit, offset, sort_by)
考虑到传递的其他参数在两个示例中仍然有效,不确定为什么此添加不起作用,问题也是,稍后我通过 ASC/DESC 参数并在 CASE WHEN 中使用(下面的示例)
ORDER BY CASE WHEN :sort = 1 THEN :sort_by END ASC, CASE WHEN :sort = 0 THEN :sort_by END DESC
【问题讨论】:
标签: android sorting android-room dao