Problème HashMap suit à requête SQL

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour à tous!

Je vais commencer par vous présenter mon code, je vous expliquerai le soucis ensuite.

public HashMap<Cartouche, Integer> readAll() {

HashMap<Cartouche, Integer> lesRes = new HashMap();
Cartouche cart;

try {
Statement state = this.conn.createStatement();
String query = "SELECT count(fk_ref) as nb, dte_achat, dte_peremption, fk_ref "
+ "FROM cartouche "
+ "GROUP BY dte_peremption, fk_ref, dte_achat "
+ "ORDER BY dte_peremption, fk_ref, dte_achat;";

ResultSet result = state.executeQuery(query);
while (result.next()) {
cart = new Cartouche(result.getDate("dte_achat"),
result.getDate("dte_peremption"),
result.getString("fk_ref")
);

lesRes.put(cart, result.getInt("nb"));
}
} catch (Exception e) {
System.out.println(e);
}
for (Cartouche id : lesRes.keySet()) {
System.out.println(id.getdatePeremption() + "\n");
}
return lesRes;
}

Donc ici, c'est ma méthode, et mon soucis, c'est que ma HashMap ne se remplit pas avec les dte_peremption ordonnées, mais de façon aléatoire, alors que je fais bien mon ORDER BY dans ma requête.

De plus, lorsque je saisis cette requête dans phpmyadmin, aucun soucis, le résultat retourné est bien ordonné.

Quelqu'un a-t-il une idée?

Merci d'avance à tous,

f4b3n.

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Une HashMap n'est pas ordonnée, c'est une Map quelconque, si tu veux une map ordonnée (SortedMap) tu peux utiliser un TreeMap.

    Remarque : du coup il est inutile de faire un ORDER BY...

    public SortedMap<Cartouche, Integer> readAll()
    {
        SortedMap<Cartouche, Integer> lesRes = new TreeMap<Cartouche, Integer>(); 

    Remarque : pour que ça fonctionne il est nécessaire d'avoir
    Cartouche implements Comparable<Cartouche>
    sinon Java ne saura pas comment trier les objets Cartouche.
    1
    1. Utilisateur anonyme
       
      Ok je vais tester ça et je te dis :)
      0
    2. Utilisateur anonyme
       
      Je le mets où le implement? Lors de la création de ma classe Cartouche? Ou dans son constructeur?
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Lors de la création de la classe, c'est une interface.

      java.lang.Comparable

      public class Cartouche implements Comparable<Cartouche>
      {
          @Override
          public int compareTo(Cartouche other)
          {
              return // <0 si this<other, 0 si this=other, >0 si this>other
          }
      }
      0
    4. Utilisateur anonyme
       
      Ok, je te remercie, je m'y remets ;)
      0
    5. Utilisateur anonyme
       
      Parfait, problème résolu sur cette partie là, j'ai juste une erreur en remplissant ma Map, mais il vient d'ailleurs, je vais aller regarder ça ;)

      Bonne soirée et merci!
      0