列名称中的冒号导致java.sql.SQLException:列名无效

时间:2014-06-17 17:47:21

标签: sql groovy

当我尝试选择包含冒号的属性名称的每一行时,我收到"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?

0 个答案:

没有答案