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

Développement Web en Java Discussion :

Affecter une valeur à un paramètre d'un PreparedStatement(méthode doPost).


Sujet :

Développement Web en Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut Affecter une valeur à un paramètre d'un PreparedStatement(méthode doPost).
    Bonjour à tous,

    Grâce à votre aide j'ai réussi à faire beaucoup de chose pour le TP qu'on nous a donné ne vous fatiguez s'il vous plaît car je fais encore appel à vous.
    Au fait,j'ai un sérieux problème avec la modification d'un étudiant car j'arrive à modifier tout les champs du formulaire sauf le matricule alors que je ne l'ai pas déclaré auto_increment (le matricule est de type varchar).Quand je clique sur le bouton modifier sans touché le matricule(c'est-à-dire sans modifier l'ancien matricule mais en modifiant les autres champs du formulaire) j'ai l'erreur suivante dans le navigateur :

    Nom : Capture.PNG
Affichages : 200
Taille : 38,0 Ko

    En vérifiant dans la table étudiant je constate que l'enregistrement est bien mis à jour et quand je tente de tout modifier y compris le matricule j'ai l'erreur suivante :

    Nom : Capture1.PNG
Affichages : 196
Taille : 8,0 Ko


    Il s'agit du message qui se trouve dans le bloque catch de l'objet métier plus précisément à ce niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try{
     
    			if(erreurs.isEmpty()){
     
    				etudiantDao.ModifierEtudiant(etudiant);
    				resultat = "Succès de la modification.";
    			}else{
    				resultat = "Echec de la modification.";
    			}
    		}catch(DAOException e){
    			setErreurs( "imprévu", "Erreur imprévue lors de la création." );
    	    	  resultat = "Échec de la modification : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
    	    	  e.printStackTrace();
    		}
    Voici les codes des classes :

    Voici le code de l'objet métier :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    package CoucheMetier;
     
    import static CoucheMetier.ValidationFormUtilitaire.getValeurSaisie;
     
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.http.HttpServletRequest;
     
    import DAO.EtudiantDao;
    import DAOException.DAOException;
    import LesObjets.Etudiant;
     
    public class EtudiantMetierModifier {
    	private static final String nomCons = "nomMo";
    	private static final String prenomCons = "prenomMo";
    	private static final String adresseCons = "adresseMo";
    	private static final String matriculeCons = "matriculeMo";
    	private static final String matriculeConsModif = "matriculeMod";
     
    	private String resultat;
    	private Map<String,String> erreurs = new HashMap<String,String>();
    	private EtudiantDao etudiantDao;
     
     
    	public String getResultat() {
    		return resultat;
    	}
    	public void setResultat(String resultat) {
    		this.resultat = resultat;
    	}
     
    	public Map<String,String> getErreurs() {
    		return erreurs;
    	}
    	public void setErreurs(Map<String,String> erreurs) {
    		this.erreurs = erreurs;
    	}
     
    	public EtudiantMetierModifier(EtudiantDao etudiantDao){
    		this.etudiantDao = etudiantDao;
    	}
     
    	public Etudiant etudiantInfo(HttpServletRequest request){
    		//String matriculeModif = getValeurSaisie(request,matriculeConsModif);
    		String matricule = getValeurSaisie(request,matriculeCons);
    		String nom = getValeurSaisie(request,nomCons);
    		String prenom = getValeurSaisie(request,prenomCons);
    		String adresse = getValeurSaisie(request,adresseCons);
     
    		Etudiant etudiant = new Etudiant();
     
    		traitementMatricule(matricule,etudiant);
    		traitementNom(nom,etudiant);
    		traitementPrenom(prenom,etudiant);
    		traitementAdresse(adresse,etudiant);
     
    		try{
     
    			if(erreurs.isEmpty()){
     
    				etudiantDao.ModifierEtudiant(etudiant);
    				resultat = "Succès de la modification.";
    			}else{
    				resultat = "Echec de la modification.";
    			}
    		}catch(DAOException e){
    			setErreurs( "imprévu", "Erreur imprévue lors de la création." );
    	    	  resultat = "Échec de la modification : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
    	    	  e.printStackTrace();
    		}
    		return etudiant;
    	}
     
    	private void traitementAdresse(String adresse, Etudiant etudiant) {
           try{
        	   ValidationAdresse(adresse);
           }catch(ValidationChamp v){
        	   setErreurs(adresseCons,v.getMessage());
           }
           etudiant.setAdresseEtudiant(adresse);
    	}
    	private void ValidationAdresse(String adresse) throws ValidationChamp {
              if(adresse != null){
            	  if(adresse.trim().length() < 5){
            		  throw new ValidationChamp("L'adresse doit contenir au moins 5 caractères.");
            	  }
              }else{
        		  throw new ValidationChamp("Veuillez entrer une adresse.");
              }		
    	}
    	private void traitementPrenom(String prenom, Etudiant etudiant) {
          		try{
          			ValidationPrenom(prenom);
          		}catch(ValidationChamp v){
          			setErreurs(prenomCons,v.getMessage());
          		}
              etudiant.setPrenomEtudiant(prenom);
    	}
    	private void ValidationPrenom(String prenom) throws ValidationChamp {
               if(prenom != null){
            	   if(prenom.trim().length() < 2){
            	   throw new ValidationChamp("Ce n'est pas un prénom;Vous devez mettre au moins 2 caractères.");
            	   }
            	}else{
            	   throw new ValidationChamp("Ce champ ne doit pas être vide."); 
               }		
    	}
    	private void traitementNom(String nom, Etudiant etudiant) {
    		try{
    			ValidationNom(nom);
    		}catch(ValidationChamp v){
    			setErreurs(nomCons,v.getMessage());
    		}
    		etudiant.setNomEtudiant(nom);
    	}
    	private void ValidationNom(String nom) throws ValidationChamp {
    		if(nom != null){
         	   if(nom.trim().length() < 2){
         	   throw new ValidationChamp("Ce n'est pas un nom;Vous devez mettre au moins 2 caractères.");
         	   }
         	}else{
         	   throw new ValidationChamp("Ce champ ne doit pas être vide."); 
            }		
    	}
    	private void traitementMatricule(String matricule, Etudiant etudiant) {
            try{
            	ValidationMatricule(matricule);
            }catch(ValidationChamp v){
            	setErreurs(matriculeCons,v.getMessage());
            }
            etudiant.setNumEtudiant(matricule);
    	}
    	private void ValidationMatricule(String matricule) throws ValidationChamp {
            if(matricule == null){
          	   throw new ValidationChamp("Ce champ ne doit pas être vide."); 
            }		
    	}
    	private void setErreurs(String champ, String messageChamp) {
    		erreurs.put(champ, messageChamp);		
    	}
    }
    Voici le code de la méthode ModifierEtudiant(Etudiant etudiant) :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.servlet.http.HttpServletRequest;
     
    import static DAO.DAOUtilitaire.*;
    import DAOException.DAOException;
    import LesObjets.Etudiant;
     
    public class EtudiantDaoImpl implements EtudiantDao {
    	private static final String SelectionCons = "call SelectionEtudiant()";
    	private static final String insertionEtudiant = "call AjoutEtudiant(?,?,?,?)";
    	private static final String suppressionEtudiant = "call SuppressionEtudiant(?)";
    	private static final String SelectionParNumEtudiantCons = "call SelectionParNumEtudiant(?)";
    	private static final String UpdateEtudiantCons = "call UpdateEtudiant(?,?,?,?,?)";
    	private DAOFactory daoFactory;
     
    	EtudiantDaoImpl(DAOFactory daoFactory){
    		this.daoFactory = daoFactory;
    	}@Override
    	public void ModifierEtudiant(Etudiant etudiant) throws DAOException {
               Connection connexion = null;
               PreparedStatement preparedStatement = null;
     
               try{
            	   connexion = daoFactory.getConnection();
            	   preparedStatement = connexion.prepareStatement(UpdateEtudiantCons);
     
            	   preparedStatement.setString(1, etudiant.getNumEtudiant());
            	   preparedStatement.setString(2, etudiant.getNomEtudiant());
            	   preparedStatement.setString(3, etudiant.getPrenomEtudiant());
            	   preparedStatement.setString(4, etudiant.getAdresseEtudiant());
            	   preparedStatement.setString(5, etudiant.getNumEtudiant());
     
            	   int confModif = preparedStatement.executeUpdate();
            	  if(confModif == 0){
            		  throw new DAOException("Echec de la modification.Veuillez réessayer.");
            	  } 
     
               }catch(SQLException s){
         		  throw new DAOException(s);
               }finally{
            	   fermeturesSilencieuses(preparedStatement,connexion);
               }
     
    	}

    Voici le code de la 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
    22
    23
    24
    25
    26
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String matricule = request.getParameter(matriculeCons);
    		EtudiantMetierModifier etudiantModif = new EtudiantMetierModifier(etudiantDao);
    		Etudiant etudiant = etudiantModif.etudiantInfo(request);
     
    		request.setAttribute(etudiantMetierCons, etudiantModif);
    		request.setAttribute(etudiantCons, etudiant);
     
    		if(etudiantModif.getErreurs().isEmpty()){
    			HttpSession session = request.getSession();
    			Map<String,Etudiant> resultas = (Map<String, Etudiant>) session.getAttribute(sessionEtudiantUnique);
     
    			if( resultas != null){
    		    	 Etudiant etudiant1 = resultas.get(matricule);
    		        etudiantDao.ModifierEtudiant(etudiant1);
    			}
    			resultas.put(etudiant.getNumEtudiant(), etudiant);
    			session.setAttribute(etudiantSession, resultas);
     
    	this.getServletContext().getRequestDispatcher(formSucces).forward(request, response);		
     
    		}else{
    	this.getServletContext().getRequestDispatcher(cheminModif).forward(request, response);		
    		}
     
    	}
    Pour ce qui est de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<String,Etudiant> resultas = (Map<String, Etudiant>) session.getAttribute(sessionEtudiantUnique);
    je l'ai initialisé dans le filtre dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(session.getAttribute(etudiantUnique) != null || session.getAttribute(etudiantUnique) == null){
    	        String Matricule = request.getParameter(matriculeCons); 
    			List<Etudiant> etudiantTrouve = etudiantDao.EtudiantSelectionner(Matricule);
    			Map<String,Etudiant> mapEtudiantTrouve = new HashMap<String,Etudiant>();
     
    			for(Etudiant etudiant1 : etudiantTrouve){
    				if(Matricule.equals(etudiant1.getNumEtudiant())){
    				mapEtudiantTrouve.put(etudiant1.getNumEtudiant(), etudiant1);
    				}
    			}
    			session.setAttribute(etudiantUnique, mapEtudiantTrouve);		    
    		}
    Je rappelle que je peux modifier tout les champs du formulaire sauf le matricule.Le dernier point d’interrogation dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final String UpdateEtudiantCons = "call UpdateEtudiant(?,?,?,?,?)";
    représente l'ancien matricule c'est-à-dire celui qu'on voit dans l'url lorsque l'on positionne la souris sur un enregistrement et le premier point d’interrogation représente le matricule que l'on veux mettre à la place de l'ancien.Merci d'avance!!!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour la première erreur, la stacktrace d'indique où se trouve l'exception : ligne 140 dans EtudiantDaoImpl, tu essayes d'accèder à une méthode ou un attribut sur une variable qui ne référence aucune instance. C'est là que tu dois regarder...

    Pour la seconde erreur, il faudrait regarder la stackTrace que tu écris dans la console, alors que tu n'écris dans la page que "Échec de la modification : une erreur imprévue est survenue, merci de réessayer dans quelques instants.".

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Bonsoir,

    Pour la première erreur,c'est exactement comme vous le dites l'erreur se trouve à la ligne 140 dans la classe "EtudiantDaoImpl" qui est associée à la ligne 78 dans la servlet "modifierEtudiant"

    Voici le code de la méthode "public void ModifierEtudiant(Etudiant etudiant)" qui se trouve dans EtudiantDaoImpl ici la ligne 33 correspond à la ligne 140 dans la classe "EtudiantDaoImpl" :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.servlet.http.HttpServletRequest;
     
    import static DAO.DAOUtilitaire.*;
    import DAOException.DAOException;
    import LesObjets.Etudiant;
     
    public class EtudiantDaoImpl implements EtudiantDao {
    	private static final String SelectionCons = "call SelectionEtudiant()";
    	private static final String insertionEtudiant = "call AjoutEtudiant(?,?,?,?)";
    	private static final String suppressionEtudiant = "call SuppressionEtudiant(?)";
    	private static final String SelectionParNumEtudiantCons = "call SelectionParNumEtudiant(?)";
    	private static final String UpdateEtudiantCons = "call UpdateEtudiant(?,?,?,?,?)";
    	private DAOFactory daoFactory;
     
    	EtudiantDaoImpl(DAOFactory daoFactory){
    		this.daoFactory = daoFactory;
    	}@Override
    	public void ModifierEtudiant(Etudiant etudiant) throws DAOException {
               Connection connexion = null;
               PreparedStatement preparedStatement = null;
     
               try{
            	   connexion = daoFactory.getConnection();
            	   preparedStatement = connexion.prepareStatement(UpdateEtudiantCons);
     
            	   preparedStatement.setString(1, etudiant.getNumEtudiant());//ligne 140 dans EtudiantDaoImpl
            	   preparedStatement.setString(2, etudiant.getNomEtudiant());
            	   preparedStatement.setString(3, etudiant.getPrenomEtudiant());
            	   preparedStatement.setString(4, etudiant.getAdresseEtudiant());
            	   preparedStatement.setString(5, etudiant.getNumEtudiant());/*Peut être l'erreur est ici puisque je me dis que c'est la même valeur que j'affecte au premier paramètre et au dernier(C'est à dire au premier point d'interrogation et au dernier ).*/
     
            	   int confModif = preparedStatement.executeUpdate();
            	  if(confModif == 0){
            		  throw new DAOException("Echec de la modification.Veuillez réessayer.");
            	  } 
     
               }catch(SQLException s){
         		  throw new DAOException(s);
               }finally{
            	   fermeturesSilencieuses(preparedStatement,connexion);
               }
     
    	}
    Voici le code de la méthode doPost() et ici la ligne 15 représente la ligne 78 dans la servlet modifierEtudiant :


    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
    22
    23
    24
    25
    26
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String matricule = request.getParameter(matriculeCons);
    		EtudiantMetierModifier etudiantModif = new EtudiantMetierModifier(etudiantDao);
    		Etudiant etudiant = etudiantModif.etudiantInfo(request);
     
    		request.setAttribute(etudiantMetierCons, etudiantModif);
    		request.setAttribute(etudiantCons, etudiant);
     
    		if(etudiantModif.getErreurs().isEmpty()){
    			HttpSession session = request.getSession();
    			Map<String,Etudiant> resultas = (Map<String, Etudiant>) session.getAttribute(sessionEtudiantUnique);
     
    			if( resultas != null){
    		    	 Etudiant etudiant1 = resultas.get(matricule);
    		        etudiantDao.ModifierEtudiant(etudiant1);//ligne 78 dans la servlet modifierEtudiant
    			}
    			resultas.put(etudiant.getNumEtudiant(), etudiant);
    			session.setAttribute(etudiantSession, resultas);
     
    	this.getServletContext().getRequestDispatcher(formSucces).forward(request, response);		
     
    		}else{
    	this.getServletContext().getRequestDispatcher(cheminModif).forward(request, response);		
    		}
     
    	}
    Pour la deuxième erreur voici ce que j'ai dans la console(je n'ai copié que la partie concernant l'erreur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DAOException.DAOException: Echec de la modification.Veuillez réessayer.
    	at DAO.EtudiantDaoImpl.ModifierEtudiant(EtudiantDaoImpl.java:148)
    	at CoucheMetier.EtudiantMetierModifier.etudiantInfo(EtudiantMetierModifier.java:62)
    	at TPServlet.modifierEtudiant.doPost(modifierEtudiant.java:67)
    D'après ce que j'ai compris c'est l'exception qui se trouve à la ligne 148 dans la classe "EtudiantDaoImpl" c'est-à-dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     int confModif = preparedStatement.executeUpdate();
            	  if(confModif == 0){
            		  throw new DAOException("Echec de la modification.Veuillez réessayer.");//ligne 148
            	  }

    déclenchée par la ligne 62 de l'objet métier c'est-à-dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try{
     
    			if(erreurs.isEmpty()){
     
    				etudiantDao.ModifierEtudiant(etudiant);//ligne 62
    				resultat = "Succès de la modification.";
    			}else{
    				resultat = "Echec de la modification.";
    			}
    		}catch(DAOException e){
    			setErreurs( "imprévu", "Erreur imprévue lors de la création." );
    	    	  resultat = "Échec de la modification : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
    	    	  e.printStackTrace();
    		}
    et la ligne 67 dans la méthode doPost() c'est-à-dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etudiant etudiant = etudiantModif.etudiantInfo(request);//ligne 67
    Pour le code de l'objet métier et de la méthode doPost() voir le message d'origine.
    Pour le code de la méthode doPost() je l'ai remis dans ce message donc vous pouvez le voir sans retourner au message d'origine.
    Je vois là ou se trouve mais erreurs mais je ne sais pas comment les corriger.
    Merci d'avance!!!

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preparedStatement.setString(1, etudiant.getNumEtudiant());//ligne 140 dans EtudiantDaoImpl
    L'erreur est là et pas ailleurs : soit c'est preparedStatement qui est null, soit c'est etudiant. preparedStatement ne l'est pas à priori, parce que connexion.prepareStatement() soulève plutôt une exception que retourne null quand il y a un problème (mais ce n'est pas impossible non plus, donc il faudrait vérifier).

    Mais si c'est etudiant qui est null, comme il est passé en paramètre de la méthode, c'est tout à fait plausible : il faut donc remonter dans l'appel pour voir d'où vient la valeur qu'on passe en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Etudiant etudiant1 = resultas.get(matricule);
    		        etudiantDao.ModifierEtudiant(etudiant1);//ligne 78 dans la servlet modifierEtudiant
    Donc effectivement à la ligne 78 : l'étudiant passé en argument est dans la variable etudiant1 qui a été récupérée de la map resultas, qui a priori ne contient pas l'étudiant qui correspont au matricule : ça se vérifie facilement en déboguant ou en ajoutant une trace.

    Ensuite il faut regarder comment cette map est construite et voir pourquoi on y trouve pas l'étudiant de matricule voulu.

    Tout ça c'est quand même une sacré usine à gaz ton code et c'est probablement pour cette raison que tu galères autant. Je ne comprends pas à quoi ça sert de récupérer un étudiant dans cette map, alors qu'on récupère un etudiant directement par le DAO (Etudiant etudiant = etudiantModif.etudiantInfo(request);) et qu'on le modifie également directement par le DAO... si cette map sert à afficher les résultats dans la jsp, on a pas à lire des données dedans, on a juste à en écrire pour la tenir à jour des modifications...



    Et après tu pourras toujours passer au niveau supérieur en réintroduisant le filtre


    Pour le second problème, la valeur retournée est censée être le nombre de lignes affectées par l'update : et c'est pour ça que tu signales une erreur si ce nombre est 0. Normalement cette valeur vient de la procédure stockée qui retourne en résultat de son appel le nombre de lignes affectées par la procédure stockée d'update. Est-ce bien le cas ?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    D'accord et j'ai oublié de vous dire que lorsque j'ai la deuxième erreur c'est-à-dire :

    Nom : Capture1.PNG
Affichages : 146
Taille : 8,0 Ko

    en vérifiant dans la table étudiant je constate qu'il n'y a aucun changement c'est-à-dire aucun champ n'est mis à jour par contre quand j'ai la première erreur,en vérifiant dans la table étudiant je constate que la mise à jour a eu lieu sauf pour le matricule ce qui m'amène à comprendre que mon erreur est surement ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                       preparedStatement.setString(1, etudiant.getNumEtudiant());
            	   preparedStatement.setString(2, etudiant.getNomEtudiant());
            	   preparedStatement.setString(3, etudiant.getPrenomEtudiant());
            	   preparedStatement.setString(4, etudiant.getAdresseEtudiant());
            	   preparedStatement.setString(5, etudiant.getNumEtudiant());
    d'après ma compréhension avec cette affectation c'est comme si le matricule est inchangeable(c'est-à-dire que le matricule que j’affecte au premier paramètre de mon preparedStatement = à celui que j'affecte au 5 qui est la condition de la mise à jour c'est-à-dire qui est dans la clause where matricule = à la valeur qu'on affecte au paramètre 5)

    Voici le script de la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure UpdateEtudiant(NumEtu varchar(50),NomEtu varchar(50),PrenomEtu varchar(50),AdressEtu varchar(50),NumEtuAncien varchar(50))
    begin
    update etudiant set NumEtudiant = NumEtu,NomEtudiant = NomEtu,PrenomEtudiant = PrenomEtu,AdresseEtudiant = AdressEtu where NumEtudiant = NumEtuAncien ; end
    j'ai testé la procédure dans mysql ça marche bien et comme vous le voyez bien l'obejctif c'est de pouvoir tout modifier en se basant sur l'ancien matricule.Donc on peut bien effectuer la modification même si l'ancien matricule et le nouveau sont differents.

    Merci d'avance!!!

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Kasko Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure UpdateEtudiant(NumEtu varchar(50),NomEtu varchar(50),PrenomEtu varchar(50),AdressEtu varchar(50),NumEtuAncien varchar(50))
    begin
    update etudiant set NumEtudiant = NumEtu,NomEtudiant = NomEtu,PrenomEtudiant = PrenomEtu,AdresseEtudiant = AdressEtu where NumEtudiant = NumEtuAncien ; end
    j'ai testé la procédure dans mysql ça marche bien et comme vous le voyez bien l'obejctif c'est de pouvoir tout modifier en se basant sur l'ancien matricule.
    A vrai dire, je ne ferais jamais ça : je pratique la notion de la clef primaire dite "aveugle". Le principe est de dire qu'une information qui sert d'identifiant est forcément immuable et non significative (au sens fonctionnel, ou métier) de fait (donc pas besoin de la modifier), et donc est par définition une clef primaire. Toute autre information peut constituer des clefs secondaires logiques (fonctionnelles/métier) et être mutables.
    La clef est dite "aveugle" car elle n'a qu'un but technique et l’utilisateur en ignore jusqu'à l'existence : on la regarde au mieux que pour des opérations de maintenance (on peut également la modifier dans le cadre d'opération de maintenance pour compresser l'intervalle de valeurs pour éviter l'overflow sur la génération automatique). Si, fonctionnellement, j'ai une information d'identification susceptible d'être modifiable, ce n'est jamais ma clef primaire : c'est juste une information et je peux la modifier comme je veux. En plus, si j'ai d'autres tables qui ont une clef étrangère sur ma clef primaire, je ne suis pas obligé de tout modifier en cascade. Et simplifie nettement l'aspect collaboratif (multi-utilisateur)

    C'est le cas avec la notion de matricule : dans ce cadre, modifier le matricule d'un étudiant n'est pas :

    Code pseudosql : Sélectionner tout - Visualiser dans une fenêtre à part
    update matricule = nouveau matricule where matricule = ancienmatricule

    Mais
    Code pseudosql : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, matricule where matricule = ancienmatricule
    pour la sélection depuis le formulaire de recherche
    puis modification dans le formulaire
    Code pseudosql : Sélectionner tout - Visualiser dans une fenêtre à part
    update matricule = nouveau matricule where id = l'id immuable de l'étudiant

    Il est probable que tu as modélisé le matricule comme clef primaire et que tu ne puisses plus le modifier pour cette raison (voir les contraintes d'intégrités liées à cette condition de clef primaire).

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Exactement le matricule est l'identifiant de la table étudiant.

Discussions similaires

  1. Réponses: 11
    Dernier message: 08/03/2015, 19h45
  2. Affecter une valeur NULL à un paramètre d'un Query ?
    Par Targan dans le forum Débuter
    Réponses: 10
    Dernier message: 18/06/2009, 13h55
  3. Réponses: 4
    Dernier message: 07/04/2005, 13h37
  4. Affecter une valeur à un radiobutton svp
    Par bigfoot dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/12/2004, 11h17
  5. [scriplet] affecter une valeur par un bean:write
    Par viena dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/11/2004, 16h29

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