2

MySQL データベースを変更しようとしているときに、Groovy で紛らわしい問題に遭遇しました。myGroovyStringが明示的に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 に答える