我正在使用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";
我在许多其他查询中使用这种格式,在我的生活中,我不能弄清楚为什么我的变量替换中出现错误。有什么想法吗?
答案 0 :(得分: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";
答案 1 :(得分:0)
正如Taballeman所说,问题不是变量替换,而是最后一个字符和"之间缺少的空格。在这个林
+ "AND p.Pol= a.pol"