0

我已经使用 WITH 子句优化了我的 DB2 查询。现在它很快,但不再在 JDBC 下工作。有人有想法吗?谢谢!

WITH tmp AS (SELECT ID_EINSENDUNG, BEURTEILUNG, VERSANDDAT_BVD, LASTUSER 
FROM BVDT.TEINSENDUNG_BVD WHERE VERSANDDAT_BVD = 
'2008-02-26' --HOST VARIABLE 1
) 
SELECT ID_EINSENDUNG, VERSANDDAT_BVD FROM tmp WHERE ID_EINSENDUNG > 
4100  --HOST VARIABLE 2

错误消息:ERRORCODE=-4461,SQLSTATE=42815 SQLState:42815 错误代码:-4461

Java 代码:

public DBCursor searchViewLandwirtOhrmarke() throws Exception {

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("WITH tmp AS " +
            "(SELECT ID_EINSENDUNG, BEURTEILUNG, VERSANDDAT_BVD, LASTUSER FROM BVDT.TEINSENDUNG_BVD WHERE VERSANDDAT_BVD = ?) " +
            "SELECT ID_EINSENDUNG, VERSANDDAT_BVD FROM tmp WHERE ID_EINSENDUNG > ?");


    prepareStatement(stringBuilder.toString());

    ps.setDate(1, DateUtils.getSQLDate("26.02.2008"));  
    ps.setInt(2,new Integer(4100));

    executeCursorSelect();
    return this;
}   

public EinsendungBvd nextViewLandwirtOhrmarke() throws Exception {
    if (endFetch()) {
        return null;
    }
    EinsendungBvd result = new EinsendungBvd(dbConn);
    result.setId_einsendung(new Integer(rs.getInt(1)));
    if (rs.wasNull()) {
        result.setId_einsendung(null);
    }
    result.setVersanddat_bvd(rs.getDate(11));

    return result;
}
4

2 回答 2

0

查看IBM Data Server Driver for JDBC and SQLJ 发布的IBM DB2 LUW 9.7 版错误代码以获取错误代码-4461

-4461 text-from-getMessage 42815

说明: 指定的值无效或超出范围。

用户响应:调用 SQLException.getMessage 以检索有关问题的特定信息。

要尝试的事情:

  1. 记录 的值SQLException.getMessage()
  2. 验证 和 的数据VERSANDDAT_BVD类型ID_EINSENDUNG
  3. 一次用一个参数测试查询;隔离哪个参数是违规者。
  4. 验证DateUtils.getSQLDate()是否正确解析您的日期字符串;比较from和fromDate.getTime()的结果。DateDateUtils.getSQLDate()DateSimpleDateFormat.parse()
于 2012-04-20T14:15:12.583 回答
0

对我来说,这似乎是一个日期格式问题。尝试将您的日期更改ps.setDate(1, DateUtils.getSQLDate("26.02.2008"));ps.setDate(1, DateUtils.getSQLDate("2008-02-26"));. 我不知道 DateUtil 规范,所以这只是一个疯狂的猜测..(有关 SQLSTATE/ERRORCODES 的列表,请参见此处)

于 2012-04-20T12:18:55.200 回答