2017-06-05 38 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"