2017-06-05 34 views
0

我使用SQL變量替換,我收到以下錯誤:在查詢變量替換錯誤

at com.ibm.as400.access.JDError.throwSQLException(JDError.java:408) 
     at com.ibm.as400.access.AS400JDBCPreparedStatement.setValue(AS400JDBCPreparedStatement.java:3532) 
     at com.ibm.as400.access.AS400JDBCPreparedStatement.setString(AS400JDBCPreparedStatement.java:3211) 
     at queries.RunQueryDB2.runNameAccount(RunQueryDB2.java:237) 

跟蹤使我對這個代碼段,

stmt.setString(1, name[0]); 
stmt.setString(2, name[1]); 
stmt.setString(3, name[2]); 

它引用這條SQL變量替換:

nameToAcctQuery="SELECT DISTINCT a.Acnum" 
        + "FROM table c, table p, table a " 
        + "WHERE c.First= '?.toUpperCase()' " 
        + "AND c.Mid= '?.toUpperCase()' " 
        + "AND c.Last= '?.toUpperCase()' " 
        + "AND p.Pol= a.pol" 
        + "AND p.name= c.name"; 

我在其他許多查詢中使用這種格式,而且我不能我,弄清楚爲什麼我在我的變量替換中出現錯誤。任何想法爲什麼?

+2

什麼是日是否拋出了SQLException的內部異常?錯誤可能是因爲在倒數第二行的末尾沒有空格。 –

+0

耶穌...我怎麼錯過了?我看了45次。謝謝。就這些。 –

+0

你在單引號中包裝了綁定佔位符('?'),這真的有用嗎?也許這是DB2的特殊語法。 –

回答

1

修改你的代碼是這樣的:

stmt.setString(1, name[0].toUpperCase()); 
stmt.setString(2, name[1].toUpperCase()); 
stmt.setString(3, name[2].toUpperCase()); 

和你這樣的查詢(DB2不知道toUpperCase功能):

nameToAcctQuery="SELECT DISTINCT a.Acnum" 
       + "FROM table c, table p, table a " 
       + "WHERE c.First= ? " 
       + "AND c.Mid= ? " 
       + "AND c.Last= ? " 
       + "AND p.Pol= a.pol" 
       + "AND p.name= c.name"; 
0

正如Taballeman給出的,問題是不變量替換,它是最後一個字符和「關於這之間缺少空間林

+ "AND p.Pol= a.pol"