2015-04-22 33 views
0

无效的列索引我有一个代码,按:值java.sql.SQLException:在常规服务类

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:无效的列索引

我在可变路径中已经通过函数split分开了某些路径的列表。我很确定我在调用sql.rows时出错。如果我将这一部分与其每个功能一起评论,一切似乎都奏效。但我确实需要该sql语句来获取满足条件的行的列表。 我做错了什么部分的代码?

回答

1

我相信你的行调用应该是

def row = sql.rows("SELECT firstname FROM person WHERE lastname like ${cPath + '%'}").each { 
1

一些我经历过的是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 -> ... } 

祝你好运!

-2

下面的工作,谢谢大家:

def source= cPath+'%'; 
      def row = sql.rows(""" SELECT firstname FROM person WHERE lastname like 'source' """) 
+0

不能有工作你就没有变扩建,另外,这不正是说,基本上两个答案?他们中的任何一个都没有票?没有接受的答案? –