2

在尝试修改 MySQL 数据库时,我在 Groovy 中遇到了一个令人困惑的问题。GroovyString除非 my显式转换为 a ,否则看似相同的代码会引发异常java.lang.String

import groovy.sql.Sql
def sql = Sql.newInstance('jdbc:mysql://localhost/test?useUnicode=yes&characterEncoding=UTF-8', 'user', 'pass', 'com.mysql.jdbc.Driver')
def tableName = 'my_table'
sql.execute "truncate $tableName"

抛出:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''my_table'' at line 1

而以下工作没有问题:

sql.execute "truncate $tableName".toString()

这是令人惊讶的。我是否应该预料到这个问题,如果是这样,在什么情况GroovyStringString可能会被区别对待?

4

1 回答 1

5

这里的区别在于 Groovy Sql 类显式地与 GStrings 一起使用以确保正确引用参数(如文档中所述)。

所以它将第一个示例转换为

truncate 'my_table'

这是错误的(正如错误所解释的)

您还可以使用:

sql.execute "truncate ${Sql.expand(tableName)}"
于 2013-03-14T14:21:37.190 回答