2010-01-27 5 views
2

J'ai une chaîne qui contient la valeur d'un numéro d'ID d'une requête que j'analyse en un entier. J'ai besoin d'une boucle FOR qui vérifie chaque fois qu'un certain nombre apparaît dans la requête plus de cinq fois. J'affiche cette information sur une page JSP. Jusqu'à présent, j'ont:en utilisant la boucle FOR pour attraper des multiples du même nombre

while (rs1.next()){ 
      String TicketNumber = rs1.getString("XXXXX_XXXXX_NO"); 
      String MUID = rs1.getString("XXXXXX_XXXX"); 
      String Name = rs1.getString("XXXXXXX_XXXXX_NAME"); 
      String LastName = rs1.getString("XXXXX_XXXX_NAME"); 
      int PIDM = Integer.parseInt(MUID); 
     for (int n = 0, n >= 5, n += 1) 

RS1 est la déclaration que je Quering et je suis en train de ces valeurs, l'analyse syntaxique le MIUD en PIDM mais je ne suis pas tout à fait sûr où aller à partir de là.

Répondre

1

Assurez l'utilisation du puissant aggregate functions le SQL vous offre sur cette zone:

SELECT muid, COUNT(muid) AS muid_count FROM ticket GROUP BY muid 

en combinaison avec

Integer muid = resultSet.getInt("muid"); 
Integer muidCount = resultSet.getInt("muid_count"); 

Ou si vous êtes réellement intéressé par les informations non agrégées, alors le mieux est en effet d'utiliser un Map<Integer, Integer> ou peut-être mieux Map<Integer, List<Ticket>> de sorte que vous pouvez simplement l'afficher en JSP à la fois bien en utilisant JSTL c:forEach. Vous pouvez ensuite obtenir la taille de List<Ticket> en utilisant JSTL fn:length.

E.g.

<c:forEach items="${ticketMap}" var="ticketEntry"> 
    MUID: ${ticketEntry.key}<br> 
    Ticket count: ${fn:length(ticketEntry.value)}<br> 
    All tickets:<br> 
    <c:forEach items="${ticketEntry.value}" var="ticket"> 
     Number: ${ticket.number}<br> 
     Name: ${ticket.name}<br> 
     Lastname: ${ticket.lastName}<br> 
    </c:forEach> 
    <hr> 
</c:forEach> 
0

Utilisez une carte pour compter le nombre de fois que chaque numéro apparaît.

Map<Integer,Integer> map = new HashMap<Integer,Integer>() 

Pour ce faire, pour chaque enregistrement du jeu de résultats

Integer count = map.get(PIDM); 
if(count == null) 
    map.put(PIDM, 1); 
else 
    map.put(PIDM, count + 1); 

Ensuite, une fois la requête effectuée, boucle à travers la recherche d'un nombre de 5 ou plus

for(Map.Entry<Integer,Integer> e : map.entrySet()) 
{ 
    if(e.getValue() > 5) 
    { 
     // do something with e.getKey() which is the PIDM from above 
    } 
} 
Questions connexes