2015-04-22 43 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

不能有工作你就沒有變擴建,另外,這不正是說,基本上兩個答案?他們中的任何一個都沒有票?沒有接受的答案? –