2010-12-07 80 views
2

Nous savons tous que SQLException est une exception vérifiée et la plupart d'entre nous sommes d'accord pour dire que Exception vérifiée est verbeuse et conduit à la pollution par jet/attraper.Comment devrais-je inclure une exception SQLException dans une exception SQLException?

Quelle approche dois-je choisir pour éviter le lancement SQLException? Quelle enveloppe/technique/bibliothèque est recommandée? (par exemple DataAccessException pour les gens de printemps, mais je ne veux pas utiliser Spring)

Répondre

5

Juste l'enveloppe comme new RuntimeException(jdbce). Ou définissez votre propre exception qui étend l'exception d'exécution et l'utilise. Je ne pense pas qu'un cadre soit requis ici. Même les enveloppes printanières vérifiaient les exceptions en les décochant chaque fois qu'elles en avaient besoin.

2

Si vous voulez traiter une exception contrôlée comme un pas cochée, vous pouvez faire

Jusqu'à Java 7 que vous pouvez faire

} catch(SQLException e) { 
    Thread.currentThread().stop(e); 
} 

Cependant en Java 8 vous pouvez faire

/** 
* Cast a CheckedException as an unchecked one. 
* 
* @param throwable to cast 
* @param <T>  the type of the Throwable 
* @return this method will never return a Throwable instance, it will just throw it. 
* @throws T the throwable as an unchecked throwable 
*/ 
@SuppressWarnings("unchecked") 
public static <T extends Throwable> RuntimeException rethrow(Throwable throwable) throws T { 
    throw (T) throwable; // rely on vacuous cast 
} 

et appelez

} catch(SQLException e) { 
    throw rethrow(e); 
} 

Les exceptions cochées sont une fonctionnalité du compilateur et ne sont pas traitées différemment au moment de l'exécution.

+3

Vous ne devriez pas faire cela. 'thread.stop' est intrinsèquement dangereux et donc obsolète. (http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#stop%28java.lang.Throwable%29) – dogbane

+1

Il est intrinsèquement dangereux d'arrêter un thread aléatoire qui ne fonctionne pas. attendre d'être arrêté. Cependant, en "arrêtant" le thread actuel, il n'est pas plus dangereux que de lancer une exception non vérifiée car il n'y a pas de réelle différence. –

+0

Ne faites pas ça! – reto