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

Servlets/JSP Java Discussion :

try catch bizarre


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut try catch bizarre
    Bonjour,

    Je souhaiterais faire une insertion dans une base de données, donc voici comment j'ai procédé :

    J'ai une page JSP sur laquelle je saisis mes données et ensuite j'appelle une servlet avec la méthode post

    Voila le code de la servlet méthode dopost:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
            try
            {
                Connection co = null;
                Class.forName("org.postgresql.Driver");
                co=DriverManager.getConnection("jdbc:postgresql://localhost/banquebase","postgres", "moi");
                Statement st;
                st = (Statement) co.createStatement();          
                st.execute("INSERT into compte  (num_cpt,nom,prenom,tel,bp,prof,adresse,solde)  VALUES('jfe','f','e','g','r','kl','vb','r')");
                st.close();
     
                getServletContext().getRequestDispatcher("/Fenregistrer_client.jsp").forward(request, response);
            }
            catch (SQLException ex) {
                Logger.getLogger(Servlet_enregistrer_client.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (ClassNotFoundException ex) {
                Logger.getLogger(Servlet_enregistrer_client.class.getName()).log(Level.SEVERE, null, ex);
            }
            catch (Exception ex) {
                Logger.getLogger(Servlet_enregistrer_client.class.getName()).log(Level.SEVERE, null, ex);
            }
    J'ai fais fis de la récupération en elle-même, pour voir l'insertion, mais en vain.

    J'ai fait le constat que si je mets la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getServletContext().getRequestDispatcher("/Fenregistrer_client.jsp").forward(request,  response);
    en dehors du catch, il arrive à faire le forward.
    Donc le bloc try ne marche pas, ni ne renvoie d'exception.

    Quelqu'un saurait-il m'expliquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    commence par desex.printStackTrace(). Ton logger envoie peut être ailleurs que là où tu pense à regarder. Ensuite, tu ne ferme pas ta connexion dans un bloc finally, c'est une erreur. Enfin, coté base de donnée, il manque le commit en fin d'opération.

  3. #3
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    J'ai fait le constat que si je mets la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         getServletContext().getRequestDispatcher("/Fenregistrer_client.jsp").forward(request,  response);
    en dehors du catch, il arrive à faire le forward.
    Donc le bloc try ne marche pas, ni ne renvoie d'exception.
    ton try - catch fonctionne correctement.
    Tu ne fais que logger l'erreur. Aucun autre traitement : levée d'une exception spécifique, traitement de l'erreur. Donc, une fois que l'exception est loggée, le traitemenent continue.

    Si tu avais fait quelquechose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    try {
       ...
    } catch (SQLException ex) {
       throw new SpecifiqueException(e); 
    } ...
    getServletContext().getRequestDispatcher("/Fenregistrer_client.jsp").forward(request,response);
    Après la levée d'erreur, le traitement se termine, donc pas de forward

  4. #4
    Membre très actif
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Citation Envoyé par florentB Voir le message
    ton try - catch fonctionne correctement.
    Tu ne fais que logger l'erreur. Aucun autre traitement : levée d'une exception spécifique, traitement de l'erreur. Donc, une fois que l'exception est loggée, le traitemenent continue.

    Si tu avais fait quelquechose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    try {
       ...
    } catch (SQLException ex) {
       throw new SpecifiqueException(e); 
    } ...
    getServletContext().getRequestDispatcher("/Fenregistrer_client.jsp").forward(request,response);
    Après la levée d'erreur, le traitement se termine, donc pas de forward
    meme si je met le forward dans le catch il ne forwarde pas

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Parce que t'as une exception, tout simplement

  6. #6
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Salut je pense que je n'ai pas bien compris ce que tu veux au final.

    Schématiquement, voilà comment fonctionne un code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private void testCall() throws SpecificException {
       try {
    
       } catch (SQLException e) {
          e.printStackTrace();
          throw new SpecificException(e); // on soulève une erreur, on arrête le traitement on retourne à la méthode appelante
       } catch (AnotherException e) {
         e.printStackTrace();
         logger.debug("erreur"); // Ici le traitement continue car on ne soulève pas d'exception donc on fera le forward.
       }
     getServletContext().getRequestDispatcher("/Fenregistrer_client.jsp").forward(request,response);
    }
    private void test () {
      try {
         testCall();
      } catch (SpecificException e) {
        //ici on récupéère l'éventuelle exception levée par testCall afin de la traiter
      }
    }
    le printStackStrace permettra de voir l'erreur dans ta console Eclipse si tu as un pb et que ton logger est mal défini.

Discussions similaires

  1. Builder n'accepte pas try/catch/__finally
    Par Rodrigue dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/04/2005, 13h15
  2. __try __finally et try catch
    Par buzzz dans le forum C++
    Réponses: 6
    Dernier message: 19/02/2005, 15h31
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 20h03
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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