在查询变量中替换错误

时间:2017-06-05 18:15:31

标签: java sql db2

我正在使用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 个答案:

答案 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"