我正在使用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";
我在许多其他查询中都使用了这种格式,而且我一生无法弄清为什么我在变量替换中遇到错误。有什么想法吗?
最佳答案
像这样修改您的代码:
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";