Problème HashMap suit à requête SQL

Résolu/Fermé
Utilisateur anonyme - 7 juil. 2014 à 19:25
 Utilisateur anonyme - 7 juil. 2014 à 21:50
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

KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
7 juil. 2014 à 19:34
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
Utilisateur anonyme
7 juil. 2014 à 19:45
Ok je vais tester ça et je te dis :)
0
Utilisateur anonyme
7 juil. 2014 à 19:51
Je le mets où le implement? Lors de la création de ma classe Cartouche? Ou dans son constructeur?
0
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
7 juil. 2014 à 20:17
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
Utilisateur anonyme
7 juil. 2014 à 21:26
Ok, je te remercie, je m'y remets ;)
0
Utilisateur anonyme
7 juil. 2014 à 21:50
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