LoginSignup
4
2

Spring データベースアクセス時の例外の基本

Posted at

この記事に書いてあること

  • プロになるためのSpring入門のデータベースアクセス時の例外の内容を読んだまとめ
  • データベースアクセス例外の問題点とSpringの汎用的な例外クラスによる解決

データベースアクセス例外の問題

データベースアクセスでエラーが起きた時にスローされる例外クラスは、データベースアクセスの仕組みごとに異なる。

DBアクセスの仕組み 例外
Java標準JDBC SQLException
MyBatis (MyBatis)PersistenceException
JPA (JPA)PersistenceException
Hibernate HibernateException

問題点:

  • 例外をハンドリングするアプリケーションの処理は、それぞれの例外クラスをキャッチする必要があり、データベースアクセスの仕組みに依存する
  • データベースアクセスの仕組みを変える場合は、例外をハンドリングしている部分の修正が必要になる

Springの汎用的な例外クラスによる解決

  • Springの機能を使うと、スローされた例外を汎用的な例外に変換してくれる
    • Spring JDBC
    • MyBatisなど他ライブラリとの連携機能
  • 例外をハンドリングするアプリケーションの処理は、汎用的なSpringの例外クラスをキャッチしてハンドリングすれば良いため、データベースアクセスの仕組みを変えても影響なし
try {
	...
} catch (Springの例外クラス) {
	...
}

Springの汎用的な例外DataAccessExceptionクラス

  • Springが提供するデータベースアクセスまわりの汎用的な例外クラスは、DataAccessExceptionを継承している
  • DataAccessExceptionはRuntimeExceptionを継承している非チェック例外
  • 非チェック例外であるため、例外をハンドリングできないのであれば、try-catchで例外をキャッチする必要はない

image.png

参照:https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/dao/DataAccessException.html

  • DataAccessExceptionクラスの代表的なサブクラス
サブクラス 説明
BadSqlGrammarException 指定された SQL が無効な場合にスローされる例外
DuplicateKeyException データを挿入または更新しようとすると、主キーまたは一意性制約に違反した場合にスローされる例外
DataAccessResourceFailureException リソースが完全に失敗したときにスローされるデータアクセス例外: たとえば、JDBC を使用してデータベースに接続できない場合

上記のように、DataAccessExceptionを継承した例外のサブクラスが、エラーの原因ごとに提供されている。例外をハンドリングするアプリケーションは、ハンドリングしたいエラーの原因に応じて、対応する例外クラスをキャッチすれば良い。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2