sql - Groovy SQL 忽略动态 select 语句中的 order by 子句

标签 sql grails groovy sql-order-by

我在 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/

相关文章:

ruby-on-rails - Grails 中是否提供 Rails 风格的链式查询?

grails - 在使用字段Grails插件中添加字段

spring - 如何在ElasticSearch中编写搜索查询?

sql - 如何在 postgres 中订购 json 列

c# - 日期升序排序

mysql - 如何向有外键的表中插入数据?

java - 是否可以在 Groovy 中提供自己类型的 Enums 实例变量?

sql - 在 SQL Server 2008 中获取 3 个表,避免使用两个循环和动态 SQL

grails - Grails GORM约束

web-services - 使用 CXF(实际上是 GroovyWS),我如何生成一个带有一个带有文本节点的子节点的 SOAP header ?