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

W4 Express Java Discussion :

Changer les messages d'erreur venant de mysql.


Sujet :

W4 Express Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Changer les messages d'erreur venant de mysql.
    Bonjour

    Mon application se connecte à une base mysql, où j'ai défini des contraintes entre les différentes tables (à l'aide de foreign key).

    Ceci dans le but d'éviter par exemple la suppression d'une localité alors que celle-ci est utilisée dans la table adresse.

    Ca marche très bien, quand je supprime un champ utilisé dans une autre table, je reçois bien une erreur du type

    Error when committing, texte venant de mysql (très peu clair pour un utilisateur final).

    J'ai trouvé que cette erreur correspond à

    LY_ERROR_COMMIT_CONTEXT
    Error when committing,
    (error : {0}).

    A quel endroit puis-je capter cette erreur pour envoyer un message plus clair à l'utilisateur.

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 59
    Points
    59
    Par défaut Gestion des erreux SQL et des messages d'erreurs base
    Bonjour,

    je vais faire ces remarques sur la version V3.4.1 mais il doit y avoir peu de différences sur d'autres versions.

    en tant que gestion des erreurs SQL il y a deux cas différents:
    1) traiter les erreurs SQL pour faire quelque chose (par exemple mettre l'erreur dans le log) car il vous faudra probablement garder trace de la 'véritable' erreur pour debug.
    2) modifier le message utilisateur qui s'affiche dans l'IHM

    Pour le cas n°1 il faut créér dans studio un comportement de session (vous en avez peut etre déjà un) : sélectionner votre projet dans l'arbre des classes et clic droit > comportement de session.

    La méthode à surcharger est
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	 /* Method called when an exception occured during the session proccessing.
    	 *
    	 * @param session the current session
    	 * @param t       The throwable instance that stopped the processing.
    	 */
    	public void handleException(LyDataSession session, Throwable t)
            {
                super.handleException(session, t);
            }

    Cela ne change pas le message d'erreur mais peut être utile.

    *********************************

    2) L'étape 1) se déroule avant l'étape 2) donc le traitement par code se fait sur l'exception réelle.
    Pour le message d'erreur proprement dit,
    il est effectivement possible de 'customiser' les messages de la base et éventuellement de gérer des traductions dans différentes langues.

    Dans Studio, item en haut "Resources" vous avez les onglets 'messages' et 'chaines de caractères'
    Dans ces onglets vous avez les valeurs par défaut de toutes les chaines Leonardi (elle sont également en fichier .properties dans le fichier leon.jar)

    Il n'y a bien sur pas les chaines de la base de données, mais vous pouvez les ajouter :
    chaque erreur base à un code d'erreur :
    voir à ce sujet SQLException.getSqlState() : a "SQLstate" string, which follows the XOPEN SQLstate conventions. The values of the SQLState string are described in the XOPEN SQL spec.
    Ce code "SQLstate" sert de clé dans les messages leonardi pour fournir un message d'erreur alternatif.

    En pratique vous pouvez les mettre dans les "Messages" (préférable) ou dans les "chaines de caractères"

    NB : cette fonction est recursive dans le cas ou une SQL Exception est causée (nested exception) par une autre SQLException.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci pour ces infos.

    La partie 2 n'est pas très claire,

    l'erreur que j'ai trouvée est dans les ressources

    LY_ERROR_COMMIT_CONTEXT
    Error when committing,
    (error : {0}).

    Si je rajoute une nouveau message avec l'erreur SQL comme indiqué, à quel endroit, dois-je indiqué de ne plus prendre LY_ERROR_CONTEXT mais mon message personalisé.
    Je ne jongle pas encore avec les objets Leonardi, mais il me semble que ça devrait être dans le Applicationbehavior ou dans le classbehavior qu'il faudrait agir.

    Merci et bonne journée.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 59
    Points
    59
    Par défaut Surcharge des erreurs
    En fait il y a deux choses différentes,
    il y a le message de base Leonardi que vous voyez et qui est le début de ce que vous indiquez :
    LY_ERROR_COMMIT_CONTEXT est la clé et la valeur est dans les ressources par défaut :
    Error when committing,
    (error : {0}).

    Siu vous modifiez dans les ressources la clé LY_ERROR_COMMIT_CONTEXT en surchargeant la ressource par par exemple :
    LY_ERROR_COMMIT_CONTEXT=Form validation has failed, internal cause : {0}
    cous aurez modifié la 1ere partie du message. Mais {0} est un argument qui vient de la base.
    Ce message est propre à la base et à son driver mais commence par un code :
    ce code d'erreur est constitué de 5 caractères. '00000'
    Les valeurs des codes d'erreurs sont spécifiées par les normes ANSI SQL et ODBC. Pour la liste des valeurs, voyez le fichier http://dev.mysql.com/doc/refman/5.0/...-handling.html
    C'est souvent ce message qui n'a pas de sens direct pour l'utilisateur.
    En mettant ce code dans les Ressources/messages comme clé et associé à une nouvelle valeur vous pouvez personnaliser le message qui est affiché dans {0}

    NB : de manière plus basique si vous mettez
    LY_ERROR_COMMIT_CONTEXT=Form validation has failed
    sans précision vous n'auriez plus le message de la base mais ce sera moins précis.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Hello fastlock

    Je suis tout à fait d'accord avec vos explications mais quand vous écrivez

    Citation Envoyé par fastlock Voir le message
    En mettant ce code dans les Ressources/messages comme clé et associé à une nouvelle valeur vous pouvez personnaliser le message qui est affiché dans {0}
    C'est là que je ne vois pas commnet faire pour bypasser le message initial et prendre le nouveau avec la clé en considération.

    Bon we

  6. #6
    Membre habitué Avatar de Capt'n Java
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Points : 146
    Points
    146
    Par défaut
    L'idée est de définir une ressource de type message (dans le fichier messages.properties) qui a comme clé le code de l'erreur remonté par la base.
    Ainsi si tu as un code d'erreur 00001, tu peux lui associer un message plus explicite en ajoutant dans le fichier message.properties la ligne suivante (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00001=Ceci est un message explicite

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Ok

    Je ne pensais pas que c'était si simple, je vais essayer et je vous tient au courant.

    Olivier

Discussions similaires

  1. [Security] Changer les messages d'erreur, best practice
    Par thierryler dans le forum Spring
    Réponses: 4
    Dernier message: 11/02/2013, 09h20
  2. Récupérer les messages d'erreur mysql
    Par LeGilou dans le forum MySQL
    Réponses: 1
    Dernier message: 10/06/2009, 19h50
  3. [Message d'erreur] gérer les message d'erreurs
    Par heid dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2004, 14h57
  4. recuperer les messages d'erreurs de interbase
    Par devalender dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/06/2004, 11h45

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