sqlite 为什么sql语句出错而房间不报错

aiazj4mn  于 2023-02-13  发布在  SQLite
关注(0)|答案(1)|浏览(124)

@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语句的吗?

hc2pp10m

hc2pp10m1#

现在我知道sql语句不能将columnName作为参数
正确,但在您的情况下,该参数不会解释为列名,而是解释为文字字符串,如'id',并且由于文字字符串和表达式有效,并且在ORDER BY子句中可以接受,因此您的查询将被解析并解释为:

select * from t_user order by 'id';

不是语法错误,但是当然不执行期望的排序。
请参见demo

相关问题