道
@Query("SELECT * FROM t_user ORDER BY :order DESC")
fun pagingSource(order: String): PagingSource<Int, User>
现在知道sql语句不能带columnName参数了,但是为什么Room没有报错,还是查询成功了,只是没有按照id倒序排列,而是按照顺序排列。
日志打印也是正确的SQL语句。
// AppDatabase
Room.databaseBuilder(...).setQueryCallback({ sqlQuery, bindArgs ->
Log.d("Android Room", "SQL Query: $sqlQuery SQL Args: $bindArgs")
},
...
// logcat
SQL Query: SELECT * FROM ( SELECT * FROM t_user ORDER BY ? DESC ) LIMIT 60 OFFSET 0 SQL Args: [id]
你能告诉我Room是如何处理这个sql语句的吗?
1条答案
按热度按时间hc2pp10m1#
现在我知道sql语句不能将columnName作为参数
正确,但在您的情况下,该参数不会解释为列名,而是解释为文字字符串,如
'id'
,并且由于文字字符串和表达式有效,并且在ORDER BY
子句中可以接受,因此您的查询将被解析并解释为:其不是语法错误,但是当然不执行期望的排序。
请参见demo。