我有一个代码:
def private prepare(params) {
groovy.sql.Sql sql = new groovy.sql.Sql(dataSource);
String variables = params.variables
if(variables != null && variables != "") {
def Paths = variables.split("\\|")
List conceptList = new ArrayList()
Paths.each { cPath ->
def row = sql.rows(""" SELECT firstname FROM person WHERE lastname like '${cPath}%' """).each { row ->
conceptList.add(PersonHelperService.getLastnameFromKey(row.firstname))
}
}
String[] conceptArray = conceptList.toArray()
jobDataMap.put("c_cds", conceptArray);
}
}
我在运行应用程序时遇到错误: java.sql.SQLException:列索引无效
我在变量Paths中列出了已经被函数拆分分隔的某些路径的列表。我很确定在调用sql.rows时遇到错误。如果我评论该部分以及它的每个功能,一切似乎都有效。但我确实需要sql语句来获取满足条件的行列表。 我错误的代码的哪一部分?
答案 0 :(得分:2)
我相信你对行的调用应该是
def row = sql.rows("SELECT firstname FROM person WHERE lastname like ${cPath + '%'}").each {
答案 1 :(得分:1)
我之前遇到的一点是sql.rows方法在使用GString时遇到了问题。
当你使用字符串插值时,这不是一个真正的字符串,实际上它是一个GString。它们大多是可以互换的,但有时却不是。
您可以使用toString()方法将GString转换为常规String。 我的建议是重写你的查询,如:
sql.rows("SELECT firstname FROM person WHERE lastname like '${cPath}%'".toString())
另一种可能更干净的解决方案是首先将查询分配给String变量。
String query = "SELECT firstname FROM person WHERE lastname like '${cPath}%'"
sql.rows(query).each { row -> ... }
祝你好运!
答案 2 :(得分:-2)
以下工作,谢谢大家:
def source= cPath+'%';
def row = sql.rows(""" SELECT firstname FROM person WHERE lastname like 'source' """)