【问题标题】:Groovy SQL ignores order by clause in dynamic select statementGroovy SQL 忽略动态选择语句中的 order by 子句
【发布时间】:2011-12-01 14:51:30
【问题描述】:

我在 Grails 应用程序中使用 Groovy SQL 来查询未连接为应用程序数据源的数据库。默认情况下,该页面的 SQL 选择语句不包含 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 语句中这样做。这是一个已知问题吗?

【问题讨论】:

    标签: sql grails groovy sql-order-by


    【解决方案1】:

    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()
    }
    

    【讨论】:

    • 感谢您的快速回复!我有一种感觉,解决方案将是一个相当简单的解决方案。
    • @ChrisDix 不用担心 :-) 很高兴我能帮上忙 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多