Java JDB:DB2查询with子句和两个主机变量不起作用
我已经使用with子句优化了DB2查询。现在它很快,但不再在JDBC下工作。有人有主意吗?谢谢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 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”))中更改日期
tops.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。我认为这不是问题所在。但是谢谢你的回复。