逃离GString的点

时间:2011-06-17 08:55:19

标签: sql groovy gstring

我想学习如何在GString中转义点,所以groovy(1.8)不会将它视为 sql.execute 中变量的一部分。我有以下代码:

  Map<String, String> dbSettings = [schemaName:"testSchema"];

  String myDbPrefix = dbSetting.schemaName + ".";

  sql.execute "DELETE FROM ${myDbPrefix}myTable"

我收到了这个错误:

Ignoring groovy.lang.MissingPropertyException: No such property: myTable for class: java.lang.String 

清楚地表明这一点。被解释为变量$ {myDbPrefix}。

的一部分

2 个答案:

答案 0 :(得分:2)

转义嵌入变量是否有帮助?

     sql.execute "DELETE FROM ${Sql.expand myDbPrefix}myTable"

答案 1 :(得分:0)

我今天遇到了这个问题。 GStrings在GroovySQL中以特殊方式处理。它在javadoc中提到过。它自动参数绑定。

GString中的每个值都将成为一个参数(?),它被设置为JDBC预处理语句参数。

真是一个惊喜!

我将通过继承Sql类并使用普通的“.toString()”重写GString处理来解决我的应用程序中的问题。

Documented in Groovy wiki

  

GString用例 - GSQL GString的另一个用例是GSQL   可以使用相同的机制将参数传递到SQL语句中   这使得Groovy与其他语言的整合成为一种巧妙的方式   喜欢SQL。然后GroovySql将表达式转换为?并使用JDBC   PreparedStatement并传入值,保留其类型。

     

如果您明确要将GString强制转换为可以使用的String   toString()方法。 Groovy也可以自动强制GStrings   进入弦乐队。