java.sql.SQLException: groovy 服务 class 中的列索引无效
java.sql.SQLException: Invalid column index in groovy service class
我有一个代码:
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 中有某些路径的列表,这些路径已经被函数 split 分隔开。我很确定我在调用 sql.rows 时出错了。如果我将该部分连同它的每个功能一起注释掉,一切似乎都有效。但我确实需要 sql 语句来获取满足条件的行列表。
我在代码的哪一部分做错了?
我相信你对行的调用应该是
def row = sql.rows("SELECT firstname FROM person WHERE lastname like ${cPath + '%'}").each {
我之前遇到的事情是 sql.rows 方法与 GString 有问题。
当你使用字符串插值时,那不是真正的字符串,实际上它是一个 GString。它们大多可以互换,但有时不能。
您可以使用 toString() 方法将 GString 转换为常规字符串。
我对你的建议是像这样重写你的查询:
sql.rows("SELECT firstname FROM person WHERE lastname like '${cPath}%'".toString())
另一个可能更简洁的解决方案是首先将查询分配给字符串变量。
String query = "SELECT firstname FROM person WHERE lastname like '${cPath}%'"
sql.rows(query).each { row -> ... }
祝你好运!
下面的成功了,谢谢大家:
def source= cPath+'%';
def row = sql.rows(""" SELECT firstname FROM person WHERE lastname like 'source' """)
我有一个代码:
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 中有某些路径的列表,这些路径已经被函数 split 分隔开。我很确定我在调用 sql.rows 时出错了。如果我将该部分连同它的每个功能一起注释掉,一切似乎都有效。但我确实需要 sql 语句来获取满足条件的行列表。 我在代码的哪一部分做错了?
我相信你对行的调用应该是
def row = sql.rows("SELECT firstname FROM person WHERE lastname like ${cPath + '%'}").each {
我之前遇到的事情是 sql.rows 方法与 GString 有问题。
当你使用字符串插值时,那不是真正的字符串,实际上它是一个 GString。它们大多可以互换,但有时不能。
您可以使用 toString() 方法将 GString 转换为常规字符串。 我对你的建议是像这样重写你的查询:
sql.rows("SELECT firstname FROM person WHERE lastname like '${cPath}%'".toString())
另一个可能更简洁的解决方案是首先将查询分配给字符串变量。
String query = "SELECT firstname FROM person WHERE lastname like '${cPath}%'"
sql.rows(query).each { row -> ... }
祝你好运!
下面的成功了,谢谢大家:
def source= cPath+'%';
def row = sql.rows(""" SELECT firstname FROM person WHERE lastname like 'source' """)