Groovy SQL忽略动态select语句中的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()
}

相关文章

1.下载安装SuperScript插件-> jEdit Plugin Central 2.修改<jedit.home>/startup/startup.bsh...
c/c++ pascal basic java c# perl    自由王国的体现 groovy     lisp    波兰式, C C++ P...
目前的脚本语言已经很多了,包括Python、Ruby以及对应于java平台的Jython和JRuby。前一段时间对Python有...
看了点groovy的ml archives,争论不休的EOS/EOL问题。 C-style的语言本没有EOS问题,语法规定显式的...
昨天终于挑灯看完了http://www-106.ibm.com/developerworks/java/library/j-alj08034.html,很多年以后...
1.   从例子开始 a)        目的:演示Groovy的一些简单特性。   b)        代码: ...