この美しいコード行を書きました。
if(sex.getErrorCode() == 1213) // deadlock
恐ろしいマジックナンバー。もちろん、自分のマジック ナンバーをすべてコード化することもできますが、これはすでにどこかに存在するはずではありませんか?
どこを見ればよいかわからない - JDBC は実際には MySQL 固有の情報を持つべきではなく、ファイルに MySQL クラスがないか、MySQL jar を認識していません。
MySQL Connector/J のcom.mysql.jdbc.MySQLErrorNumbers
クラスは、比較できる一連の定数を定義しますSQLException.getErrorCode()
。例えば:
if(e.getErrorCode() == MysqlErrorNumbers.ER_LOCK_DEADLOCK) { }
このリストは、マニュアルにいくらか文書化されています。
JDBC を直接使用する代わりに、Springを使用することを検討できます。Spring JDBC テンプレートは、SQL ステータス コードの検査、接続障害の処理などのためのボイラープレート コードを実装します。一般的なSQLException
例外を適切な特定のDataAccessException
例外に変換します。
いいえ、MySQL エラー番号を保持する Java の共通クラスはありません。これは、各データベース ベンダーが独自の意味を持つ独自のエラー コードを持っているためです。例えば、 。おそらく、それぞれのjar内に定数クラスがあります。
@MarcB が指摘したように、次の特定の MySQL エラー コードに基づいて、各エラーを表す定数を使用して独自のクラスを作成できます: Server Error Codes and Messages。IMOでは、特定の方法で処理したいエラーに基づいて定数を作成する必要があり、他のエラーは一般的な方法で処理する必要があります。