Servlet attraper contrainte unique exception
J'essaie d'insérer des données dans la table nommée rmas
.
Le format du tableau est
|rcode|rname|vcode|vanme
Ici, j'ai mis la clé primaire pour rcode.
Quand je suis à l'insertion d'un enregistrement existant rcode, il affiche quelque chose comme ORA-0000-1 contrainte unique Violé..
Si je suis en utilisant le code suivant, il affiche le message même dans le cas d'autres erreurs.
catch(Exception e)
{
//out.println("rcode already exists");
}
Donc, j'ai envie de l'attraper que clé primaire exception seulement et s'afficher comme "rcode existent déjà". Est-il possible? Si oui, comment?
Merci d'avance
- regardez votre compilateur, qui n'est en il jette. Je veux dire le type d'exception
Vous devez vous connecter pour publier un commentaire.
Exception
est le parent de tous les une exception. Si vous avezcatch(Exception e) { }
bloc écrit alors toutes les exceptions seront dans cette catégorie. Vous avez besoin de trouver des exceptions qui le compilateur est de retour. Dire si votre compilateur renvoie cette exceptionSQLIntegrityConstraintViolationException
puis le bloc suivant viendraitDe cette façon, vous pouvez avoir un nombre quelconque de blocs d'exception. Mais assurez-vous que les plus spécifiques de types d'exceptions sont d'abord écrit, puis le parent exceptions
java.sql.BatchUpdateException
Vous êtes à la capture d'un
Exception
, qui est la classe mère de toutes les exceptions. Par la capture de cela, vous utilisez le Pokémon de Style ("Gonna catch 'em all!") qui est, en général, une mauvaise pratique car vous perdez la possibilité de prendre des cours d'action différents selon les exception qui a été levée dans ce bloc de code.Attraper l'exception relative à la violation de contrainte pour éviter de montrer le message pour chaque exception.
Pourquoi voudriez-vous pour ce faire sur une servlet qui m'échappe, mais je vous suggère de prendre un coup d'oeil à l'architecture de votre solution et de fournir une approche à plusieurs niveaux, la capture de cet exceptions dans le Persistance de niveau et de retour de votre propre code de résultat, qui définit le message doit être affiché à l'utilisateur.
Remarque: j'ai utilisé code de Résultat et pas code d'Erreur pour permettre de retourner un code pour la réussite de l'opération.
Je n'aurais pas du code dans un servlet. Je pense qu'il appartient à une classe qui vit dans votre persistance de niveau. Les Servlets sont des HTTP auditeurs; ils ne devraient pas avoir de code de base de données en eux.
Votre interface en fonction de la persistance de la classe attraper cette exception et gérer de manière appropriée. Écrire une interface basée sur un service qui utilise la classe de persistance pour réaliser le cas d'utilisation. Laissez la servlet appeler le service et la figure de ce que l'affichage suivant basé sur ce qui se passe.
Il a appelé à une architecture en couches. Je le recommande fortement.
Dans mon cas, au printemps de démarrage de l'application, j'ai utilisé DataIntegrityViolationException pour attraper contrainte unique comme ceci: