0

私のDAO実装には次のメソッドがあります。

@Override
public String getResultEntry(String arg1, String key, String date) throws SQLException, IOException {
    String res = "";
    String sql = buildSQL(arg1, key, date);

    MapSqlParameterSource namedParameters = new MapSqlParameterSource();
    namedParameters.addValue("arg1", arg1);
    namedParameters.addValue("id", key);
    namedParameters.addValue("date", date);

    try {
        logger.info("getResultEntry is about to execute the following query:[" + sql + "]");

        Blob blob = namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Blob.class);
        long blobLength = blob.length();
        byte[] bytes = blob.getBytes(1, (int)blobLength);

        logger.info("getResultEntry END");

        res = convertBytesToString(bytes);

    } catch (EmptyResultDataAccessException erdae) {
        logger.error("getResultEntry failed to execute the query due to exception! Return an empty string ", erdae);
        logger.info("getResultEntry END");

        res = "";
    }
    return res;

}

クエリが空の結果を返し、EmptyResultDataAccessExceptionがスローされることがあります。私はそれをキャッチして、空の文字列を返します。ただし、例外が表示され続け、その後実行が終了します。

例外:

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:179)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:191)
at com.ars.linking.mrretriever.dao.MRRetrieverDAOImpl.getResultEntry(MRRetrieverDAOImpl.java:82)
at com.ars.linking.mrretriever.exec.MRRetriver.processResults(MRRetriver.java:125)
at com.ars.linking.mrretriever.exec.MRRetriver.main(MRRetriver.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

例外を「適切に」処理するにはどうすればよいですか? (私はそれを飲み込んで空の文字列を返すだけで再スローすることに興味がありません)

4

1 に答える 1

1

明示的に例外をログに記録しています:

logger.error("getResultEntry failed to execute the query due to exception! Return an empty string ", erdae);

ログにスタック トレースを表示したくない場合は、2 番目の引数を削除します。infoこれはエラーではなく、既にログ エントリがあるため、行全体を削除することをお勧めします。

コードの実行は、この例外によって終了しません。他の場所にあり、返された空の文字列に関連している場合と関連していない場合がある終了の原因を見つけます。

于 2012-11-14T10:17:09.027 に答える