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 :

Recherche d'un enregistrement


Sujet :

JDBC 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 Recherche d'un enregistrement
    Bonjour à tous,

    J'ai un problème avec mon moteur de recherche.Au fait,mon but c'est de trouver toutes les notes associées à un matricule que je saisis dans un formulaire de recherche.
    Mais en saisissant un matricule possédant une note,j'ai un message d'erreur(Ce matricule ne possède pas de note.) qui devrais s'afficher que si le résultat de la recherche est nul.
    Donc cela m'a permis de comprendre que l'attribut que je récupères dans la JSP est vide même en saisissant un matricule possédant une note.

    Voici le code de la méthode qui sélectionne les enregistrements relatif à un matricule :

    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
     
    	private static final String rechercheEtudiantCons = "call rechercheEtudiant(?)";
    public List<Note> SelectionnerNoteEtudiant(String NumEtudiant)throws DAOException {
    		   Connection connexion = null;
    	       PreparedStatement preparedStatement = null;
    	       ResultSet resultat = null;
    	       List<Note> noteRechercher = new ArrayList<Note>();
    	       try{
    	    	   connexion = daoFactory.getConnection();
    	    	   preparedStatement = connexion.prepareStatement(rechercheEtudiantCons);
     
    	    	   preparedStatement.setString(1, NumEtudiant);
     
    	    	   resultat = preparedStatement.executeQuery();
    	    	   while(resultat.next()){
    	    		   noteRechercher .add(Stokage(resultat));
    	    	   }
    	       }catch(SQLException s){
    	    	   throw new DAOException("Aucun enregistrement trouvé.");/*Message console que je reçois même en saisissant un matricule possédant une note.*/
    	       }finally{
    	    	   fermeturesSilencieuses(resultat,preparedStatement,connexion);
    	       }
    		return noteRechercher ;       
    	}
    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
     
    	private static final String resultatRecheCons = "noteDeEtudiant";
    	private static final String Resultat = "/WEB-INF/resultat.jsp";
    	private static final String vide = "/WEB-INF/vide.jsp";
     
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        	String matricule = getValeurSaisie(request,rechercheRecCons);
        	if(matricule != null){
     
        	List<Note> noteTrouve = noteDao.SelectionnerNoteEtudiant(matricule);
    	    Map<Long,Note> noteDeEtudiant = new HashMap<Long,Note>();
     
    	      HttpSession session = request.getSession();
     
        	for(Note notRechercher : noteTrouve10){
        		noteDeEtudiant.put(notRechercher .getValide(), notRechercher );
        	}
     
          session.setAttribute(resultatRecheCons, noteDeEtudiant);
          this.getServletContext().getRequestDispatcher(Resultat).forward(request, response);
        	}else{
        	      this.getServletContext().getRequestDispatcher(vide).forward(request, response);
        	}
     
          }
    Voici le code de la JSP :

    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
    <c:choose>
    <c:when test = "${empty sessionScope.noteDeEtudiant}">//Ce test est toujours vide donc ce qui veut dire que c'est ma Map "noteDeEtudian"qui ne contient rien voilà pourquoi j'ai le message ce matricule ne possède aucune note même s'il en possède. 
    <font color = "red"><c:out value = "Ce matricule ne possède aucune note."/></font>
    </c:when>
    <c:otherwise>
    <link href="inc/TableCSSCode.css" rel="stylesheet" type="text/css" />
    <table class = "CSSTableGenerator">
    <tr>
    <td>Nom & prénom</td>
    <td>Matière</td>
    <td>Date</td>
    <td>Note</td>
    <td colspan = "2">Action</td>
    </tr>
    <c:forEach items = "${sessionScope.noteDeEtudiant}" var = "note">
    <tr>
    <td><c:out value = "${note.value.etudiant.nomEtudiant}"/>&nbsp &nbsp <span align = "right"><c:out value = "${note.value.etudiant.prenomEtudiant}"/></span></td>
    <td><c:out value = "${note.value.matiere.nomMatiere}"/> </td>
    <td><c:out value = "${note.value.tableDate.date}"/> </td>
    <td><c:out value = "${note.value.note}"/> </td>
    <td><a href = "<c:url value = "/supprimerNote"><c:param name = "valide" value = "${note.key}"/><c:param name = "matEtudiant" value = "${note.value.etudiant.numEtudiant}"/><c:param name = "numMatiere" value = "${note.value.matiere.numMatiere}"/><c:param name = "date" value = "${note.value.tableDate.date}"/></c:url>"><img src = "Image/sup.png" alt = "Supprimer" title = "Supprimer"/></a></td>
    <td><a href = "<c:url value = "/modifierNote"><c:param name = "valide" value = "${note.key}"/><c:param name = "matEtudiant" value = "${note.value.etudiant.numEtudiant}"/><c:param name = "numMatiere" value = "${note.value.matiere.numMatiere}"/><c:param name = "date" value = "${note.value.tableDate.date}"/></c:url>"><img src = "Image/modif.png" alt = "Modifier" title = "Modifier"/></a></td>
    </tr>
    </c:forEach>
    </table>
    </c:otherwise>
    </c:choose>
    Je n'arrives vraiment pas à situer l'erreur.Merci d'avance!!!

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Ce n'est pas comme ça que l'on appelle une procédure stockée. De plus, un résultat vide ne créera pas une SQLException donc ton catch devarit plutot dire "problème de connexion" ou un truc du genre.


    http://java.developpez.com/faq/jdbc/...lableStatement

  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
    Merci pour votre réponse et je serais très ravi si vous me dites comment appeler une procédure stockée mais avant je tiens à vous faire remarquer la constante dans laquelle j'ai appelé ma procédure et j'ai fait pareil pour beaucoup de mes procédure ça a marché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private static final String rechercheEtudiantCons = "call rechercheEtudiant(?)";//Procédure qui recherche un étudiant en fonction de son matricule dans la table NOTE. 
    private static final String updateNoteCons = "call ModifierNote(?,?,?,?,?,?,?)";//ça a marché
    Pour ce qui est du message dont vous parlez là également vous devez remarquer que c'est une exception du genre SQLException que j'ai personnalisé dans une classe appelée DAOException(donc je peux écrire n'importe quoi comme message) et pour moi le catch devrait retourner une erreur du genre SQLException car j'effectues une requête SQL a l'intérieur du try si je suis en erreur merci de m'éclaircir d'avantage.
    En cas d'échec de la connexion j'ai précisé les différents messages à afficher concernant chaque étape de la connexion comme :
    Impossible de charger le DRIVER, Le DRIVER est introuvable etc.

    D'ailleurs je me suis trompé au niveau du message console;voici ce que j'ai réellement dans la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    GRAVE: "IOException" lors du chargement de sessions persistantes: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: LesObjets.Note
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: LesObjets.Note
     
    Caused by: java.io.NotSerializableException: LesObjets.Note
    LesObjets est le package dans lequel se trouve mon bean Note dont voici la structure :


    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
     
    package LesObjets;
     
    public class Note {
       private Etudiant etudiant;
       private Matiere matiere;
       private Tabledate tableDate;
       private double Note;
       private Long valide;
     
    public Etudiant getEtudiant() {
    	return etudiant;
    }
     
    public void setEtudiant(Etudiant etudiant) {
    	this.etudiant = etudiant;
    }
     
     
    public Matiere getMatiere() {
    	return matiere;
    }
     
    public void setMatiere(Matiere matiere) {
    	this.matiere = matiere;
    }
     
    public Tabledate getTableDate() {
    	return tableDate;
    }
     
    public void setTableDate(Tabledate tableDate) {
    	this.tableDate = tableDate;
    }
     
    public double getNote() {
    	return Note;
    }
     
    public void setNote(double note) {
    	Note = note;
    }
     
    public Long getValide() {
    	return valide;
    }
     
    public void setValide(Long valide) {
    	this.valide = valide;
    }
     
    }
    Merci d'avance!!!

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Pour les callable statement, je t'ai fourni le lien. Ma remarque était que ton message dans le DAo est incorrect, il fait croire que l'on a rien trouvé alors que le problème peut être tout autre, d'où l'intérr de logger quelque par la SQLException, via par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch(SQLException s){
                       s.printStackTrace();
    	    	   throw new DAOException("Aucun enregistrement trouvé.");/*Message console que je reçois même en saisissant un matricule possédant une note.*/
    	       }
    Qui permettra de debugger ton problème.

    Quand à
    le catch devrait retourner une erreur du genre SQLException car j'effectues une requête SQL a l'intérieur du try si je suis en erreur merci de m'éclaircir d'avantage.
    J'ai, j'avoue, du mal à comprendre ce que tu veux dire là.

  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
    Bonjour,

    La recherche ne trouve rien c'est pourquoi j'ai le message du DAOException mais quand même je vais tracer l'erreur.J'ai pu le savoir en remplaçant le paramètre que je passe à la méthode SelectionnerNoteEtudiant par un matricule existant dans la table note.Donc j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List<Note> noteTrouve = noteDao.SelectionnerNoteEtudiant("001/MonEcole/2017");//ici je remplace le paramètre par un matricule qui existe dans la table note et ça marche
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List<Note> noteTrouve = noteDao.SelectionnerNoteEtudiant(matricule);
    Cela m'a permis de comprendre que le problème se trouve au niveau du passage de la valeur que je récupères à la méthode chargée de retrouver les enregistrements correspondants.
    Merci d'avance!!!

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2006, 16h05
  2. Recherche impossible mais enregistrement existant
    Par nicoalafac dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/03/2006, 11h39
  3. recherche d'un enregistrement
    Par patbeautifulday1 dans le forum Access
    Réponses: 4
    Dernier message: 14/02/2006, 15h56
  4. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 09h13
  5. Réponses: 2
    Dernier message: 01/08/2005, 16h36

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