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 ErrorCode: -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

私には日付形式の問題のように見えます。日付をに変更してみて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 に答える
0

エラーコードのIBM Data Server Driver for JDBC and SQLJによって発行されたIBM DB2 LUWバージョン9.7エラーコードを見る-4461

-4461 getMessage からのテキスト 42815

説明: 指定された値が無効であるか、範囲外です。

ユーザーの処置: SQLException.getMessage を呼び出して、問題に関する特定の情報を取得してください。

試すこと:

  1. の値を記録しますSQLException.getMessage()
  2. とのデータ型を確認しVERSANDDAT_BVDますID_EINSENDUNG
  3. 一度に 1 つのパラメーターを使用してクエリをテストします。どのパラメーターが違反者であるかを特定します。
  4. DateUtils.getSQLDate()日付文字列が正しく解析されていることを確認します。fromとfromDate.getTime()の結果を比較します。DateDateUtils.getSQLDate()DateSimpleDateFormat.parse()
于 2012-04-20T14:15:12.583 に答える