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 :

Tableau de valeur unique


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Tableau de valeur unique
    Bonjour à tous,

    Je me permets de vous demander votre parce que j'ai des difficultés à me sortir d'un script que je dois réaliser. Il me faut à partir d'une base de donnée, répertorier et compter les valeurs qui sont identiques afin de les exploiter dans un graphique en croissant.

    Exemple :
    note 1 : 3.0
    note 2 : 5.0
    note 3 : 5.0
    note 4 : 3.5

    ceci doit donner le tableau
    3.0 1
    5.0 2
    3.5 1

    Pour le moment j'ai pensé à un tableau de valeur à deux dimenssions, mais je suis sur de rien

    Merci de votre aide.

  2. #2
    Membre confirmé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Points : 558
    Points
    558
    Par défaut
    ...Il me faut à partir d'une base de donnée, ...
    N'est ce pas possible de traiter en amont avec une requête SQL (count & group by) ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par totoche Voir le message
    N'est ce pas possible de traiter en amont avec une requête SQL (count & group by) ?
    Très bonne suggession, je n'y avais pas penser. J'ai essayer de le mettre en place mais il y a une erreur que je comprends pas

    C'est mon servlet Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    EntityManager em = this.emf.createEntityManager();
    EntityTransaction t = em.getTransaction();
    t.begin();
    intervention i = em.find(intervention.class, id);
     
    Query query = em.createQuery("SELECT COUNT(n) AS nombre, n.global FROM note AS n WHERE intervention="+id+" GROUP BY n.global");
    @SuppressWarnings("unchecked")
    List<note> listnote = query.getResultList();
    t.commit();
    request.setAttribute("note", listnote);
    request.setAttribute("i", i);
    RequestDispatcher rd = request.getRequestDispatcher("interventionPage.jsp");
    rd.forward(request, response);
    Page jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <c:forEach items="${note}" var="note">
    	<c:out value="${note.global}" />
            <c:out value="${note.nombre}" />
    </c:forEach>
    et l'erreur retourné par eclipse est :
    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
     
    déc. 27, 2011 10:05:18 PM org.apache.catalina.core.ApplicationDispatcher invoke
    Grave: "Servlet.service()" pour la servlet jsp a lancé une exception
    java.lang.NumberFormatException: For input string: "global"
    	at java.lang.NumberFormatException.forInputString(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
    	at javax.el.ArrayELResolver.coerce(ArrayELResolver.java:166)
    	at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:46)
    	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
    	at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
    	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985)
    	at org.apache.jsp.interventionPage_jsp._jspx_meth_c_005fout_005f5(interventionPage_jsp.java:544)
    	at org.apache.jsp.interventionPage_jsp._jspx_meth_c_005fforEach_005f0(interventionPage_jsp.java:508)
    	at org.apache.jsp.interventionPage_jsp._jspService(interventionPage_jsp.java:276)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
    	at com.supinfo.notetonsta.servlet.interventionPage.doGet(interventionPage.java:62)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Je comprends pas vraiment où est l'erreur mais quand j'enlève COUNT(n) as nombre tout marche,sauf la fonction que je recherche

  4. #4
    Membre averti 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 : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 441
    Points
    441
    Par défaut
    est ce que le fait que tu mettes le même nom de variable entre ta boucle et la variable de référence ne pose pas problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <c:forEach items="${note}" var="currNote">     
        <c:out value="${currNote.global}" />
        <c:out value="${currNote.nombre}" /> 
    </c:forEach>
    De plus, quelles sont les types des attributs de ton objet note et les valeurs retournées par ta requête ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Les attributes sont définis par avec une Entity

    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
     
    package com.supinfo.notetonsta.entity;
     
    import java.io.Serializable;
     
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
     
    @Entity
    @Table(name="note")
    public class note implements Serializable{
    	private static final long serialVersionUID = 1L;
     
    	public note(){}
     
    	@Id
    	@GeneratedValue(strategy=GenerationType.IDENTITY)
    	private Long id;
    	private Long idbooster;
    	private Double speaker;
    	private Double slide;
    	private Double global;
    	private String com;
     
    	//intervention
    	@ManyToOne
    	@JoinColumn(name="intervention_fk")
    	private intervention intervention;
     
    	public Long getId() {
    		return id;
    	}
     
    	public void setId(Long id) {
    		this.id = id;
    	}
     
    	public Long getIdbooster() {
    		return idbooster;
    	}
     
    	public void setIdbooster(Long idbooster) {
    		this.idbooster = idbooster;
    	}
     
    	public Double getSpeaker() {
    		return speaker;
    	}
     
    	public void setSpeaker(Double speaker) {
    		this.speaker = speaker;
    	}
     
    	public Double getSlide() {
    		return slide;
    	}
     
    	public void setSlide(Double slide) {
    		this.slide = slide;
    	}
     
    	public Double getGlobal() {
    		return global;
    	}
     
    	public void setGlobal(Double global) {
    		this.global = global;
    	}
     
    	public String getCom() {
    		return com;
    	}
     
    	public void setCom(String com) {
    		this.com = com;
    	}
     
    	public intervention getIntervention() {
    		return intervention;
    	}
     
    	public void setIntervention(intervention intervention) {
    		this.intervention = intervention;
    	}
     
     
     
    }
    La requête réécrite pour phpmyadmin :
    SELECT COUNT(*) AS nombre, global FROM note WHERE intervention_fk=1 GROUP BY global
    Retourne :
    nombre global
    1 2.5
    1 3
    3 3.5

  6. #6
    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 804
    Points
    48 804
    Par défaut
    Déjà, ta classe note n'a pas le champ "nombre" que tu essaie d'afficher.

    Ensuite, l'erreur est

    java.lang.NumberFormatException: For input string: "global"

    Qui viens de ${note.global}, lancée par arraycoerce. Ce qui indique que note est un tableau ou une liste et qu'on essaie d'accéder à l'index "global", ce qui ne peux pas marcher car "global", c'est pas un nombre. On pourrait croire que ce problème viens du fait que tu réutilise le nom de variable "note". Mais en fait non. Il viens d'ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @SuppressWarnings("unchecked")
    List<note> listnote = query.getResultList();
    Tu a fais un suppresswarning, et pourtant, le compilateur avait raison de t'avertir.
    query.getResultList() ne renvoie jamais une liste de note dans ton cas. Il renvoie une Liste de tableau (ou une liste de liste, je ne sais plus) car tu n'a pas fait un query retournant des objets mais juste des champs. Donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<?> listnote = query.getResultList();
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <c:forEach items="${note}" var="note">
    	<c:out value="${note[0]}" />
            <c:out value="${note[1]}" />
    </c:forEach>

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup sa marche très bien, mais une dernière question, si maintenant avec ces valeurs récupérées, je souhaite faire la somme des personnes qui ont votés pour ensuite les utiliser dans un graphique.
    Je me pose juste une question comment dans la boucle je peux introduire la somme?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int somme = 0; <!-- Comment je l'introduit dans ma page jsp -->
    <c:forEach items="${note}" var="note">
    	<c:out value="${note[0]}" /><!-- nombre de votant -->
            <c:out value="${note[1]}" /><!-- note -->
            somme = somme + note[0]; <!-- Comment je l'introduit dans ma page jsp -->
    </c:forEach>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/01/2014, 23h16
  2. Réponses: 3
    Dernier message: 04/11/2010, 17h06
  3. Trier un tableau de valeurs uniques
    Par phroy dans le forum Excel
    Réponses: 3
    Dernier message: 04/11/2009, 17h14
  4. [Tableaux] Valeur unique dans un tableau
    Par glsn dans le forum Langage
    Réponses: 6
    Dernier message: 06/12/2006, 11h18
  5. Réponses: 2
    Dernier message: 23/11/2003, 18h44

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