从 GString 中转义点

发布于 2024-11-15 18:52:05 字数 470 浏览 3 评论 0原文

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

I would like to learn how to escape dot in GString so groovy (1.8) does not treat it as a part of an variable inside sql.execute. I have the following code:

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

  String myDbPrefix = dbSetting.schemaName + ".";

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

And I got this error:

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

Clearly indicating that . was interpreted as part of variable ${myDbPrefix}.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一页 2024-11-22 18:52:05

转义嵌入变量有帮助吗?

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

Does escaping the embedded variable help?

     sql.execute "DELETE FROM ${Sql.expand myDbPrefix}myTable"
埋葬我深情 2024-11-22 18:52:05

今天我就被这个问题困扰了。 GString 在 GroovySQL 中通过特殊方式处理。 javadoc里有提到。它进行自动参数绑定。

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

真是一个惊喜!

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

在 Groovy wiki 中记录

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

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

I got hit by this problem today. GStrings get handled by a special way in GroovySQL. It's mentioned in the javadoc. It does automatic parameter binding.

Each value in the GString will become a parameter (?) which gets set as a JDBC prepared statement parameter.

What a surprise!

I'm going to fix the problem in my application by subclassing the Sql class and overriding the GString handling with plain ".toString()" .

Documented in Groovy wiki:

GString Use Cases - GSQL Another use case for GString is GSQL where
parameters can be passed into SQL statements using this same mechanism
which makes for a neat way to integrate Groovy with other languages
like SQL. GroovySql then converts the expressions to ? and uses a JDBC
PreparedStatement and passes the values in, preserving their types.

If you explicitly want to coerce the GString to a String you can use
the toString() method. Groovy can also automatically coerce GStrings
into Strings for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文