2015-01-21 38 views
0

錯誤信息的一個實例:Groovy的INSERT語句無法推斷的SQL類型用於org.codehaus.groovy.runtime.GStringImpl

URI 
/racetrack/readUserRole/index 
Class 
org.postgresql.util.PSQLException 
Message 
Can't infer the SQL type to use for an instance of org.codehaus.groovy.runtime.GStringImpl. Use setObject() with an explicit Types value to specify the type to use 

代碼:

a="col01" 
b="col${usercol}" 
c="col${rolecol}" 
sql.eachRow("select $a,$b,$c from read_csv where col01=? and col${usercol}!=? ", [file.name,""]) { 

    t="${it."$a"}" 
    i="${it."$b"}" 
    r="${it."$c"}" 
    t.getClass() == String 
    i.getClass()== String 
    r.getClass()== String 

    def list2=[t,i,r] 
    println list2 
    sql.execute('insert into read_user_role(version,roledata,textname,userdata)'+ 
      'VALUES (0,?,?,?)', list2) 
} 

發生問題在插入語句作爲錯誤消息,所以我想如何解決這個SQL類型的問題?

+0

你能顯式轉換?例如'list2 = [t,i,r] *。toString()'? – cfrick 2015-01-21 09:41:56

+0

也你的選擇有可能容易受到一個SQL注入 – cfrick 2015-01-21 09:43:06

+0

好吧會嘗試謝謝 – 2015-01-21 09:45:46

回答

0

使用Sql類中的靜態方法將變量包裝爲數據庫已知的類型。例如,包裝一個GString作爲varchar,你可以使用:

import static groovy.sql.Sql.* 

.... 

sql.eachRow("select * from foo where name = ${VARCHAR(myVar)}")