我正在使用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";

08-17 10:14