4

我想学习如何在 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} 的一部分。

4

2 回答 2

2

转义嵌入变量有帮助吗?

     sql.execute "DELETE FROM ${Sql.expand myDbPrefix}myTable"
于 2011-06-17T09:11:32.807 回答
0

我今天被这个问题击中了。GStrings 在 GroovySQL 中通过一种特殊的方式进行处理。它在javadoc中提到。它执行自动参数绑定。

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

多么惊喜!

我将通过子类化 Sql 类并用普通的 ".toString()" 覆盖 GString 处理来解决我的应用程序中的问题。

记录在 Groovy wiki 中

GString 用例 - GSQL GString 的另一个用例是 GSQL,其中参数可以使用相同的机制传递到 SQL 语句中,这为将 Groovy 与其他语言(如 SQL)集成提供了一种巧妙的方法。GroovySql 然后将表达式转换为 ? 并使用 JDBC PreparedStatement 并将值传入,保留它们的类型。

如果您明确想要将 GString 强制转换为 String,您可以使用 toString() 方法。Groovy 还可以自动将 GStrings 强制转换为 Strings。

于 2012-05-24T07:52:01.253 回答