2013-03-14 38 views
2

我剛剛在嘗試修改MySQL數據庫時遇到了Groovy中令人困惑的問題。這似乎是相同的代碼拋出一個異常,除非我的GroovyString明確轉換爲java.lang.String您如何知道GroovyStrings何時不像字符串一樣對待?

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實例可能會被區別對待?

回答

5

這裏的區別在於Groovy Sql類明確地與GStrings一起工作,以確保參數被正確引用(as explained in the documentation)。

所以將第一例子

truncate 'my_table' 

哪項是錯誤的(因爲錯誤解釋)

您還可以使用:

sql.execute "truncate ${Sql.expand(tableName)}" 
+0

+1我雖然有同樣的問題只需使用'asc'和'desc'就可以解決問題。它應該被標記爲可接受的答案。而且它讓我們瘋狂,因爲將字符串打印到控制檯顯示出完全有效的SQL字符串! – msanjay 2014-01-28 14:42:16

相關問題