wil*_*ill 5 mysql string groovy jdbc
我有一个关于在JDBC SQL查询中使用字符串的问题.这里有两个例子,我希望两者都有效,但事实并非如此.
工作版......
tabl = "Action"
query = "SHOW FULL COLUMNS FROM `Action`;"
println " "+ query
dbConnection.eachRow( query ){
Run Code Online (Sandbox Code Playgroud)
错误变体:
tabl = "Action"
query = "SHOW FULL COLUMNS FROM `${tabl}`;"
println " "+ query
dbConnection.eachRow( query ){
Run Code Online (Sandbox Code Playgroud)
该错误以SQL语法错误的形式返回.正如您所看到的,语句在文本上是相同的.
输出显示语句,然后是错误:
SHOW FULL COLUMNS FROM `Action`;
May 20, 2013 10:52:01 AM groovy.sql.Sql eachRow
WARNING: Failed to execute: SHOW FULL COLUMNS FROM `?`; because:
Parameter index out of range (1 > number of parameters, which is 0).
May 20, 2013 10:52:01 AM groovy.sql.Sql eachRow
Run Code Online (Sandbox Code Playgroud)
我认为只是Groovy试图寻找罪魁祸首.当我将文字字符串提供给JDBC连接时,它对"Action"表起作用.
我希望有人可以解释错误并提供修复.
对于那些阅读,我发现这个选项是一个解决方法:
query = "SHOW FULL COLUMNS FROM `"+ tabl.toString() +"`;"
Run Code Online (Sandbox Code Playgroud)
虽然可能有一个不那么冗长的选项,使用"+"; 对我来说,感觉好像使用$ {tabl}应该有效.
提前致谢,
我认为问题在于,当您使用字符串内变量时会产生与不使用它时不同的对象类型。一个是 a String,另一个是 a GString。
例如,查看此脚本和输出:
def a = "123"
def b = "abc"+a
def c = "abc${a}"
println b.class
println c.class
>>
class java.lang.String
class org.codehaus.groovy.runtime.GStringImpl
Run Code Online (Sandbox Code Playgroud)
eachRow由于某种原因,该函数似乎对这种差异很敏感。您正在使用的两个函数是
但我不明白为什么他们会有不同的行为..
另一种解决方法是调用toString变量query- 这会将其强制转换回 a String:
def d = c.toString()
println d.class
>>
class java.lang.String
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1787 次 |
| 最近记录: |