1

コードに例外処理部分があり、それが 4 つの sqlException を発生させる可能性がある場合、何がどこで発生したかを最もよく伝える、それらを処理する最良の方法は何でしょうか? 私は貧乏人の解決策を作成しました(「exceptionDesc」を使用して)。

この状況を処理するための適切な方法はありますか? (一意のクラスとサブクラスを作成せずに)

    try {
        exceptionDesc = "prepareStatement"; 
        statement = connection.prepareStatement(sql);

        exceptionDesc = "statement.set...";
        statement.setDate(1, sqlDate);

        exceptionDesc = "executeUpdate";
        statement.executeUpdate();

        exceptionDesc = "commit";           
        connection.commit();
    } 
    catch (SQLException sqlEx) {
        if (exceptionDesc.equals("prepareStatement")) {
            LOG.error ...
        } else if (exceptionDesc.equals("executeQuery")) {
            LOG.error(" executeQuery ...
                    ...
                    ...
        throw new SQLException(sqlEx);
    } 
4

3 に答える 3

5

何もしないでください。例外のスタック トレースがそれを行います。

catch (SQLException e) {
    LOG.error("A SQLException happened", e);
    throw e;
}

十分なものです。ロガーは、スタック トレースを表示するように構成されている場合 (そうする必要があります)、スタック トレースを出力し、スタック トレースは、どのメソッドのどの行で例外がスローされたかを正確に示します。また、スタックの一番下まで、どのメソッドが例外の原因となったメソッドを呼び出したかなどもわかります。

于 2012-07-22T16:50:12.677 に答える
1

1.最も具体的な例外から最も抽象的な例外まで、try キャッチを配置する必要があります。

2.ただし、SQLException を使用しても、スタック トレースは次のことを示します。

-例外が発生したメソッド名。

-例外が発生したクラス名。

-例外が発生したファイル名。

-例外が発生した行番号。

catch (SQLException e) {

       e.printStackTrace();
}
于 2012-07-22T17:20:26.893 に答える
0

なぜビジネス層は、このような詳細を知る必要があるのでしょうか? db トランザクションのどの行が失敗したかによって、ビジネス ロジックがどのように変化するのでしょうか? これは、人間の開発者/メンテナーにとってのみ興味深いものです。ところで、私は何もキャッチしません。JDBC 接続を管理する場所であるメインの例外バリアまで例外を伝播させます。すべてのDAOメソッドでトランザクション管理が繰り返されていますが、これもあまり良くありません。ビジネス レベルのコード (および DAO) は、各トランザクションの詳細のみに関与させ、接続とトランザクションの管理は 1 か所に任せる必要があります。プロジェクトにSpringを使用した場合(非常に暖かい提案です)、これは簡単にセットアップできます。

于 2012-07-22T19:06:12.433 に答える