SQLExceptionについて
下で、「予期できる」か「予期できない」でエラー処理の方針を分けると書いたけれど、そうするとSQLExceptionみたいな例外の扱いについて気になる。単純にSQLExceptionといってもエラーの内訳は
と、メソッド内で処理できるエラーとできないエラーがあるわけで、これを一緒くたに呼び出し元に投げても困るわけだ。
これはもうcatch節で例外の詳細を見て対応してやるしかないんだろうか。
catch(SQLException exp) { if( exp.Number = 1 ) { // 一意制約エラー // 該当レコードを削除して再登録する処理 } else { throw new DBAccessException("DB操作のエラーが発生", exp); } }
みたいにしてやるしかないのかなぁ。イマイチ美しくない気もするけれど。