0
    public void onClick() throws SQLException   
  try {
 // Do something
} catch(MySQLIntegrityConstraintViolationException e) { 
     //Can i convert this exception to SQL Exception
}

MySQLIntegrityConstraintViolationExceptionをメソッドによってスローされるSQLExceptionに変換できますか?

4

4 に答える 4

4

しかし、MySQLIntegrityConstraintViolationExceptionすでに(継承による)SQLExecptionです!したがって、再スローする必要はありません(try / catch-blockを削除するだけです)。

于 2012-09-29T12:18:17.693 に答える
3

確かに、ラップして再スローすることができます-それがより多くの情報を追加したり、あなたのアイデアをより一般的にすると思うなら。この場合、あなたが捕らえている例外はあなたが考えているものよりも多くの情報を与えると思います。

ただし、SQLExceptionは選択しません。これはチェックされた例外です。流れはチェックされた例外からチェックされていない例外に変わったと思います。

Springは、SQLExceptionsをRuntimeExceptionを拡張するチェックされていないDataAccessExceptionにラップします。私はあなたがそれに続くことを提案するでしょう。

これがあなたがそれをするべき方法です:

catch(MySQLIntegrityConstraintViolationException e) { 
    throw new SQLException(e);
}

メッセージを渡すだけではいけません。スタックトレース全体を提供します。

于 2012-09-29T12:16:53.583 に答える
1

のコンストラクターを使用して、ブロック内にコンストラクターSQLExceptionを作成できます。Catch

try {
} catch (MySQLIntegrityConstraintViolationException e) {
    throw new SQLException(e);
}
于 2012-09-29T12:19:25.593 に答える
1

再スローMySQLIntegrityConstraintViolationExceptionのサブクラスなので不要です。SQLExceptionデータベース固有の詳細からビジネスロジックレイヤーを抽象化する場合は、データベースが切り替えられた場合でもロジックが引き続き有効になるように、ロジックレイヤーでSQL例外をキャッチするようにしてください。

于 2012-09-29T12:40:48.953 に答える