Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDB:DB2查询with子句和两个主机变量不起作用_Java_Sql_Jdbc_Db2 - Fatal编程技术网

Java JDB:DB2查询with子句和两个主机变量不起作用

Java JDB:DB2查询with子句和两个主机变量不起作用,java,sql,jdbc,db2,Java,Sql,Jdbc,Db2,我已经使用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 tm

我已经使用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;
}

我觉得这是个日期格式问题。尝试在
ps.setDate(1,DateUtils.getSQLDate(“26.02.2008”))中更改日期
to
ps.setDate(1,DateUtils.getSQLDate(“2008-02-26”)。我不知道DateUtil的规格,所以这只是一个猜测。。(有关SQLSTATE/ERRORCODES的列表,请参见)

查看IBM DB2 LUW 9.7版中的错误代码
-4461

-4461来自getMessage 42815的文本

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

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

尝试的事项:

  • 记录
    SQLException.getMessage()
    的值
  • 验证
    VERSANDDAT_BVD
    ID_EINSENDUNG
    的数据类型
  • 一次使用一个参数测试查询;找出违反者是哪个参数
  • 验证
    DateUtils.getSQLDate()
    是否正确解析日期字符串;比较来自
    DateUtils.getSQLDate()
    Date
    上的
    Date.getTime()
    和来自
    Date
    结果

  • 对不起,我没提那件事。DateUtils使用类似“DD.MM.YYYY”的欧洲日期格式字符串创建java.sql.Date。我认为这不是问题所在。但是谢谢你的回复。