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 :

Impossible de récupérer la valeur d'un champ


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Impossible de récupérer la valeur d'un champ
    Bonjour

    J'ai créé une base de données en mysql comportant plusieurs champs dont le champ "pwd" correspondant au mot de passe. Je voudrais récupérer le mot de passe pour un utilisateur en fonction de son identifiant. Voici mes codes:

    Code java : 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
     
        private static final String SQL_SELECT_PWD        = "SELECT distinct pwd FROM User  WHERE id_user = ? ";
     
    @Override
    	public String trouverPwd(long idUser) throws DAOException{
    		Connection connexion = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
     
            String passe = null;
     
            try {
                /* Récupération d'une connexion depuis la Factory */
                connexion = daoFactory.getConnection();
                /*
                 * Préparation de la requête avec les objets passés en arguments
                 * (ici, uniquement un id) et exécution.
                 */
                preparedStatement = initialisationRequetePreparee( connexion, SQL_SELECT_PWD, false, idUser );
                resultSet = preparedStatement.executeQuery();
                /* Parcours de la ligne de données retournée dans le ResultSet */
                if ( resultSet.next() ) {
                    passe= resultSet.getString("pwd");
                    System.out.println("pass est: "+passe);
                }
            } catch ( SQLException e ) {
                throw new DAOException( e );
            } finally {
                fermeturesSilencieuses( resultSet, preparedStatement, connexion );
            }
     
            return passe;
    	}
     
     
    public static PreparedStatement initialisationRequetePreparee( Connection connexion, String sql, boolean returnGeneratedKeys, Object... objets ) throws SQLException {
            PreparedStatement preparedStatement = connexion.prepareStatement( sql, returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS );
            for ( int i = 0; i < objets.length; i++ ) {
                preparedStatement.setObject( i + 1, objets[i] );
            }
            return preparedStatement;
        }

    Et lorsque j'appelle la méthode de récupération du mot de passe:

    Code java : 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
    private void validationUser(long idUser, String login, String hpwd, String apwd, String npwd, String cpwd) throws FormValidationException
      {
    	  if (userDao.verifierLogin(login, idUser) != null)
          {
            throw new FormValidationException("Ce login est déjà* utilisé!");
          }
    	  else
    	  {
    		  if(!apwd.isEmpty() || !npwd.isEmpty()|| !cpwd.isEmpty())
    		  {
    			  String passe = userDao.trouverPwd(idUser);
    			  if(!passe.equals(apwd))
    				{
    			        throw new FormValidationException("L'ancien mot de passe est erroné!!!!");
     
    				}
    		  }
    	  }
      }

    J'ai ce message d'erreur:

    GRAVE: "Servlet.service()" pour la servlet [servlets.ModifierUser] a généré une exception
    java.lang.NullPointerException
    at forms.ModifierUserForm.validationUser(ModifierUserForm.java:160)
    at forms.ModifierUserForm.traiterUser(ModifierUserForm.java:111)
    at forms.ModifierUserForm.modifierUser(ModifierUserForm.java:69)
    at servlets.ModifierUser.doPost(ModifierUser.java:42)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at filters.PrechargementFilter.doFilter(PrechargementFilter.java:42)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1839)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
    Je rappelle que le id en paramètre n'est pas null.

    Merci

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Tu as un nullpointeur en ligne 160.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    at forms.ModifierUserForm.validationUser(ModifierUserForm.java:160)
    Il faut donc voir quelle est cette ligne et corriger en conséquence.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    En fait je viens de me rendre compte que l'erreur vient en fait de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    userDao.verifierLogin(login, idUser)
    dont voici l'implémentation:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        private static final String SQL_SELECT_PAR_LOGIN_ID= "SELECT id_user, nom, prenom, compte, login, pwd FROM User WHERE login = ? and id_user != ?";
     
    /* Implémentation de la méthode définie dans l'interface UserDao */
        @Override
        public User verifierLogin( String login, long id ) throws DAOException {
            return trouver( SQL_SELECT_PAR_LOGIN_ID, login, id );
        }

    Et plus précisement de cette partie au niveau de ma requete sql:


    Quand je mets juste id_user = ? ça marche. On dirait que le !=? n'est pas pris en compte.

    Quelle est l'alternative à lorsqu'on utilise les preparedStatement?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    En SQL, on utilise <> pas !=

    (encore que certaines DB comprennent !=, mais ce n'est pas dans la norme ISO)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Pourtant quand je fais par exemple , ça marche. C'est à dire quand je définis une valeur à la place du ?

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Quel est le code de ta méthode trouver(...) ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Voici le code de la méthode trouver:

    Code java : 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
     private User trouver( String sql, Object... objets ) throws DAOException {
            Connection connexion = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            User user = null;
     
            try {
                /* Récupération d'une connexion depuis la Factory */
                connexion = daoFactory.getConnection();
                /*
                 * Préparation de la requête avec les objets passés en arguments
                 * (ici, uniquement un id) et exécution.
                 */
                preparedStatement = initialisationRequetePreparee( connexion, sql, false, objets );
                resultSet = preparedStatement.executeQuery();
                /* Parcours de la ligne de données retournée dans le ResultSet */
                if ( resultSet.next() ) {
                    user = map( resultSet );
                }
            } catch ( SQLException e ) {
                throw new DAOException( e );
            } finally {
                fermeturesSilencieuses( resultSet, preparedStatement, connexion );
            }
     
            return user;
        }
     
    private static User map( ResultSet resultSet ) throws SQLException {
            User user = new User();
            user.setId( resultSet.getLong( "id_user" ) );
            user.setNom( resultSet.getString( "nom" ) );
            user.setPrenom( resultSet.getString( "prenom" ) );
            user.setCompte( resultSet.getString( "compte" ) );
            user.setLogin( resultSet.getString( "login" ) );
            user.setPwd( resultSet.getString( "pwd" ) );        
            return user;
        }

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/04/2017, 14h37
  2. impossible de récupérer les valeurs de ma base dans les champs
    Par abdelkarim_1987 dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2013, 10h05
  3. Réponses: 1
    Dernier message: 22/02/2005, 23h40
  4. Récupérer la valeur d'un champ disabled
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2005, 10h45
  5. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45

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