当我尝试选择包含冒号的属性名称的每一行时,我收到"java.sql.SQLException: Invalid column name"
错误(例如"item:one"
。
在我的代码中,调用以下行:
if (!(matGroup == null || matGroup.equals(''))) {
sql.eachRow("select distinct da.item_name from defined_attribute da where da.attribute2=$matGroup") {
selectItems << it.item_name
}
}
如果我直接向数据库(select distinct da.item_name from defined_attribute da where da.attribute2='item:one'
)运行相同的select命令,则不会收到任何错误。我还尝试了代码名称不包含冒号的代码,这些代码似乎被正确检索。
我在这里找到:http://groovy.329449.n5.nabble.com/Sql-is-it-possible-to-escape-the-colon-td5155389.html添加"sql.enableNamedParameters = false"
可能会解决问题,但是,我被限制使用groovy 2.1.6,而且不支持。
我也尝试过其他事情来解决冒号问题,但都没有成功。我尝试过的事情包括:
在集合中定义参数
def params = [matGroup]
sql.eachRow("select distinct da.item_name from defined_attribute da where da.attribute2=?", params)
在将冒号传递给eachRow()
之前转义冒号def params = [matGroup.replaceAll(":", "\\:")]
sql.eachRow("select distinct da.item_name from defined_attribute da where da.attribute2=?", params)
在将命令传递给eachRow()
之前将其定义为字符串def command = "select distinct da.item_name from defined_attribute da where da.attribute2='" + matGroup + "\'"
sql.eachRow(command.toString())
有没有办法让这个工作为groovy 2.1.6?