IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Détection de contraintes non respectées


Sujet :

JDBC Java

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut Détection de contraintes non respectées
    Hello,

    Lors de l'ajout d'une entrée dans une table, je fait les choses suivante dans mon code JDBC:

    - J'essai d'insérer l'entrée avec une requête
    - Si une exception est levée, je regarde le message (ex.getMessage()). Si celui-ci contient le nom d'une contrainte d'unicité (ou le mot primary dans le cas de la clé primaire de la table), je fait un certains nombre de traitements et je renvoi que l'entrée existe déjà.

    Question: est-ce portable? Je n'en ai pas l'impression: j'ai remarqué que sous windows / mysql, les comportements sont différents, et dans certains messages d'erreurs, les noms de contraintes sont en minuscule etc... Mieux, sous un linux 64 bit, je n'ai pas le même message...

    Bref, la solution "facile" serait de faire d"abord une requête vérifiant la contrainte, et ensuite d'insérer si OK. Mais c'est moche: la vérification se fait du coup deux fois (par moi et par le SGBD).

    Des infos là dessus ?

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Le premier élément descriptif de la nature d'une exception c'est la classe à laquelle elle appartient.
    Le plus propre est donc de mettre plusieurs catch: un catch sur chaque type d'exception à gérer.
    Et éviter les qui intercepte tous ce qui hérite de Exception et dont il est difficile de savoir de quoi il s'agit.

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Oui sauf que toutes les exceptions liées à l'execution de requêtes avec JDBC sont des instances de la classe SQLException.

    Donc en l'occurence pour le moment je n'ai rien trouvé de mieux que de lire ce qu'il est écrit dans le message comme indiqué plus haut.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 48
    Points
    48
    Par défaut
    Une erreur de contrainte de clef ou autre va générer une SQLException, sur cette exception (qui est bien sûr attrapable via un try/catch). Il est possible de récupérer le SQL state de cette erreur afin de le tester et regarder si cela correspond à une erreur de clef primaire ou autre.

    Note cette solution même si elle me semble plus "propre" n'est pas vraiment portable d'un SGBD à l'autre, même si des SQL state sont communs entre certains SGBD tu finiras sûrement par en trouver un qui a voulu faire les choses différemment.

    Note: la liste des SQL state sont généralement récupérables sur le site de chaque SGBD.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2008, 15h55
  2. Réponses: 4
    Dernier message: 26/06/2008, 18h15
  3. Insertion données avec contrainte non respectée
    Par yoyostras dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/05/2008, 16h20
  4. [Oracle] Contrainte CHECK non respectée
    Par ms7 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/07/2006, 17h02
  5. Contraintes de clés étrangères non respectées
    Par parfait dans le forum Requêtes
    Réponses: 7
    Dernier message: 28/07/2004, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo