我想学习如何在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}。
的一部分答案 0 :(得分:2)
转义嵌入变量是否有帮助?
sql.execute "DELETE FROM ${Sql.expand myDbPrefix}myTable"
答案 1 :(得分:0)
我今天遇到了这个问题。 GStrings在GroovySQL中以特殊方式处理。它在javadoc中提到过。它自动参数绑定。
GString中的每个值都将成为一个参数(?),它被设置为JDBC预处理语句参数。
真是一个惊喜!
我将通过继承Sql类并使用普通的“.toString()”重写GString处理来解决我的应用程序中的问题。
GString用例 - GSQL GString的另一个用例是GSQL 可以使用相同的机制将参数传递到SQL语句中 这使得Groovy与其他语言的整合成为一种巧妙的方式 喜欢SQL。然后GroovySql将表达式转换为?并使用JDBC PreparedStatement并传入值,保留其类型。
如果您明确要将GString强制转换为可以使用的String toString()方法。 Groovy也可以自动强制GStrings 进入弦乐队。