我在 Grails 应用程序中使用 Groovy SQL 来查询未连接为应用程序数据源的数据库。默认情况下,页面的 SQL select 语句不包含 order by 子句。如果用户单击其中一个标签,我想动态更改查询以按指定方向对指定列进行排序。当我尝试将 order by 子句添加到 select 语句时,我得到一个(捕获的)SQLException,表明我的查询未正确结束。
我的查询:
sql.eachRow("select * from mytable where type = 'SUMMARY' and acolumn=${columnValue} order by ${sortColumn} ${sortOrder}") { row ->
results << row.toRowResult()
}
我可以通过对返回的列表进行排序来解决这个问题,但是如果可能的话,我想在 SQL 语句中进行排序。这是一个已知问题吗?
最佳答案
Groovy 试图用 ?
替换所有参数并制作 PreparedStatement
这不适用于 ORDER BY 子句,因此您需要 use Sql.expand
尝试:
sql.eachRow( "select * from mytable where type = 'SUMMARY' and acolumn=${columnValue} order by ${Sql.expand(sortColumn)} ${Sql.expand(sortOrder)}") { row ->
results << row.toRowResult()
}
关于sql - Groovy SQL 忽略动态 select 语句中的 order by 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8343258/