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

Collection et Stream Java Discussion :

Trier une liste avec Collections.sort(liste)


Sujet :

Collection et Stream Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut Trier une liste avec Collections.sort(liste)
    Bonjour à tous,

    voilà j'ai un problème de trie et je galère avec depuis deux jours déjà, je vous explique:

    j'ai une liste d'objet définie comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List<ConfigCTO> liste = new ArrayList<ConfigCTO>();
    et que j'alimente avec un result set (le résultat de ma requete), puis je fais le trie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     SqlQuery requete = null;
    		try {
    			requete = new SqlQuery(config.getString("jndiMes"), sqlTouteLaListeAServir);			
    			final ResultSet rs = requete.getResults();
    			while (rs.next())
    			{
    				ConfigCTO cto = new ConfigCTO(rs.getString("PN"), rs.getString("IDECLIENT"), rs.getString("CONFIGCODE"), rs.getString("NUMCONFIG"), rs.getInt("QTE_USED"), rs.getString("DATEXPED"));
     
    				liste.add(cto);					
    			}
     
    			//trie de la liste
    			 Collections.sort(liste);
    dans ma classe ConfigCTO , j'ai définie la ma méthode compareTo comme suit pour faire le trie par date, client et configCode :
    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
     
    //trie par date, client et parnumConfig
    	public int compareTo(Object other) {
    		// TODO Auto-generated method stub
    		String date1 = ((ConfigCTO) other).getDateExpe(); 
    		String client1 = ((ConfigCTO) other).getClient();
    		String configcode1 = ((ConfigCTO) other).getConfigcod(); 
     
    		String date2 = this.getDateExpe(); 
    		String client2 = this.getClient(); 
    		String configcode2 = this.getConfigcod(); 
     
    		int dateCmp = date2.compareTo(date1);
            if (dateCmp != 0) 
                return dateCmp;
     
            int clientCmp = client2.compareTo(client1);
            if (clientCmp != 0)
            	return clientCmp ;
     
            int configcodeCmp = configcode2.compareTo(configcode1);
            if (configcodeCmp != 0)
            	return configcodeCmp ;
            else 
            	return 1;        
    	} 
     
    }
    le problème c'est que le trie de ma liste n'est pas bonne à la sortie, j'ai essayé plein de truc en cherchant sur le net, mais jusque là j'arrive toujours pas à trier ma liste.

    quelqu'un aurait-il une idée de ce que j'ai peut être loupé? ou ce n'est simplement pas possible de trier les objets dans une liste sur plusieurs attributs?

    vos aides seront les bien venus, parce que là je ne sais vraiment pas quoi faire

    je vous remercie de votre aide par avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Eh bien le return 1; à la fin est quand même assez malheureux. Les 5 dernières lignes devraient être simplement remplacées par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return configcode2.compareTo(configcode1);

    Mais en fait je me demande si tu as bien pensé à mettre implements Comparable<ConfigCTO> à ta class ConfigCTO.
    Et si oui, comment tu peux avoir une méthode public int compareTo(Object other) et non pas public int compareTo(ConfigCTO other).

    Citation Envoyé par nakry Voir le message
    ou ce n'est simplement pas possible de trier les objets dans une liste sur plusieurs attributs?
    Ben si, ça marche pareil que sur un seul -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    Oui ma classe ConfigCTO implements Comparable au lieu de Comparable<ConfigCTO> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class ConfigCTO  extends Entity implements java.lang.Comparable, Serializable { .....}
    c'est pourquoi ma méthode compareTo est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int compareTo(Objet other)
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int compareTo(ConfigCTO other)
    et dedans j'ai fais le cast de objet en ConfigCTO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String date1 = ((ConfigCTO) other).getDateExpe(); 
    		String client1 = ((ConfigCTO) other).getClient();
    		String configcode1 = ((ConfigCTO) other).getConfigcod();
    effectivement c'est plus simple de faire comme tu l'as dit, je vais essayé ta solution et je te dis ça

    merci beaucoup !!!

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    ça ne marche toujours pas
    la liste n'est toujours pas triée, ma classe est bien ainsi
    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
     
    public class ConfigCTO  extends Entity implements Comparable<ConfigCTO> , Serializable {
     .....
     .......
    	//trie par date, client et parnumConfig
    	public int compareTo(ConfigCTO other) {
    		// TODO Auto-generated method stub
    		String date1 = ((ConfigCTO) other).getDateExpe(); 
    		String client1 = ((ConfigCTO) other).getClient();
    		String configcode1 = ((ConfigCTO) other).getConfigcod(); 
     
    		String date2 = this.getDateExpe(); 
    		String client2 = this.getClient(); 
    		String configcode2 = this.getConfigcod(); 
     
    		int dateCmp = date2.compareTo(date1);
                    if (dateCmp != 0) 
                         return dateCmp;
     
                   int clientCmp = client2.compareTo(client1);
                   if (clientCmp != 0)
            	     return clientCmp ;
     
                  return configcode2.compareTo(configcode1); 
    	}
     
    }
    et ma liste traitée ainsi
    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
     
    public ListeAservir ()
    	{		
    		List<ConfigCTO> liste = new ArrayList<ConfigCTO>();
    		SqlQuery requete = null;
    		try {
    			requete = new SqlQuery(config.getString("jndiMes"), sqlTouteLaListeAServir);			
    			final ResultSet rs = requete.getResults();
    			while (rs.next())
    			{	
    				ConfigCTO cto = new ConfigCTO(rs.getString("PN"), rs.getString("IDECLIENT"), rs.getString("CONFIGCODE"), rs.getString("NUMCONFIG"), rs.getInt("QTE_USED"), rs.getString("DATEXPED"));
     
    				liste.add(cto);					
    			}
     
    			//trie de la liste
    			 Collections.sort(liste);  			
     
    			int i = 0 ;			 
    			for (ConfigCTO cto: liste){
    				i++;				
    				donnee.put(i, cto);
    			}
     
    		} catch (Exception ex) {
    			log.error(ex);
    		} finally {
    			if (requete != null)
    				requete.closeConnexion();
    		}
    	}
    il y aurait-il une autre erreur?

    merci d'avance

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    j'ai l'impression que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(liste)
    ne compare pas un élément de la liste à tous les autres éléments de la liste avant de le classer, mais plutot il ne le compare qu'avec l'élément qui le suit, est-ce comme cela que fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(liste)
    pour comparer les objets contenus dans une liste?


    aidez moi SVP!!!

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il ne les compare pas tous, mais il fait autant de comparaisons que nécessaire pour que la liste soit entièrement et correctement triée.

    Pour l'instant je ne vois pas ce qui ne va pas. Je pense que soit tu te trompes en disant que les données ne sont pas triées après Collections.sort(), soit ta décision d'utiliser compareTo() entre Strings ne produit pas le tri dont tu as besoin (et que tu aurais pu t'en rendre compte tout seul.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je vois dans ton code un
    donnee.put(i, cto);
    Si après tu travailles sur donnee, le tri n'existe plus...

    Tu pourrais préciser ce que tu fais ou mettre tout le code ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    voici le tri que j'attends:
    PN IDECLIENT CONFIGCODE NUMCONFIG QTE_USED DATEXPED
    DF-F850-3HGSS HDS NULL 648 19/09/2013
    DF-F850-DBS HDS NULL 45 19/09/2013
    DF-F850-3TNL HDS NULL 216 19/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS01 U33808-0 1 19/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS03 U33809-0 1 19/09/2013
    DKC-F710I-900JCM HDS 13 39 DKC HDS03 U33809-0 128 19/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS10 U33911-0 1 19/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS11 U33814-0 1 19/09/2013
    DKC-F710I-900JCM HDS 13 39 DKC HDS11 U33814-0 128 19/09/2013
    DF-F850-3TNL HDS NULL 12 20/09/2013
    DF-F850-DBS HDS NULL 24 20/09/2013
    DF-F850-3HGSS HDS NULL 216 20/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS04 U33818-0 1 20/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS05 U32104-0 1 20/09/2013
    DKC-F710I-900JCM HDS 13 39 DKC HDS05 U32104-0 128 20/09/2013
    DKC-F710I-900JCM HDS 13 39 DKC HDS06 U33902-0 128 20/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS06 U33902-0 1 20/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS12 U33917-0 1 20/09/2013
    DKC-F710I-900JCM HDS 13 39 DKC HDS12 U33917-0 128 20/09/2013
    DKC-F710I-RK42 HP 13 38 DKU HP02 U33807-0 1 20/09/2013
    DF-F850-3HGSS HDS NULL 144 23/09/2013
    DF-F850-DBS HDS NULL 20 23/09/2013
    DF-F850-DBS HDS NULL 4 24/09/2013
    DF-F850-3HGSS HDS NULL 37 24/09/2013
    DKC-F710I-300KCM HP 13 39 DKU HP01 U33914-0 384 24/09/2013
    DKC-F710I-RK42 HP 13 39 DKU HP01 U33914-0 1 24/09/2013
    DF-F850-3TNL HDS NULL 17 25/09/2013
    DF-F850-3HGSS HDS NULL 144 25/09/2013
    DF-F850-DBS HDS NULL 20 25/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS07 U33912-0 1 25/09/2013
    DKC-F710I-RK42 HP 13 39 DKC HP01 U33815-0 1 25/09/2013
    DF-F850-DBS HDS NULL 20 26/09/2013
    DF-F850-3HGSS HDS NULL 144 26/09/2013
    DF-F850-3TNL HDS NULL 72 26/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS08 U33913-0 1 26/09/2013
    DKC-F710I-RK42 HP 13 39 DKU HP02 NULL 1 26/09/2013
    DKC-F710I-300KCM HP 13 39 DKU HP02 NULL 384 26/09/2013
    DF-F850-3TNL HDS NULL 101 27/09/2013
    DF-F850-3HGSS HDS NULL 288 27/09/2013
    DF-F850-DBS HDS NULL 20 27/09/2013
    DKC-F710I-900JCM HDS 13 39 DKC HDS09 U33904-0 128 27/09/2013
    DKC-F710I-RK42 HDS 13 39 DKC HDS09 U33904-0 1 27/09/2013
    DKC-F710I-900JCM HDS 13 39 HDD HDS02 NULL 256 27/09/2013
    DF-F850-3TNL HDS NULL 287 04/10/2013
    DF-F850-3HGSS HDS NULL 431 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS01 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS02 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS03 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS04 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS05 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS06 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS07 NULL 1 04/10/2013
    DKC-F710I-RK42 HDS 13 40 DKC HDS08 NULL 1 04/10/2013
    DKC-F710I-900JCM HDS HDS-900JCM-131004 NULL 768 04/10/2013
    DKC-F710I-RK42 HDS HDS-RK42-131004 NULL 12 04/10/2013
    DKC-F710I-RK42 HP 13 40 DKC HP01 NULL 1 04/10/2013
    DKC-F710I-RK42 HP 13 40 DKU HP01 NULL 1 04/10/2013
    DKC-F710I-RK42 HP 13 40 DKU HP02 NULL 1 04/10/2013
    DKC-F710I-RK42 HP 13 40 DKU HP03 NULL 1 04/10/2013
    DKC-F710I-RK42 HP 13 40 DKU HP04 NULL 1 04/10/2013
    DKC-F710I-RK42 HP 13 40 DKU HP05 NULL 1 04/10/2013
    DKC-F710I-300KCM HP HP-300KCM-131004 NULL 1280 04/10/2013
    DKC-F710I-RK42 HP HP-RK42-131004 NULL 11 04/10/2013
    DF-F850-3TNL HDS NULL 795 11/10/2013
    DF-F850-3HGSS HDS NULL 527 11/10/2013
    DF-F850-DBS HDS NULL 129 11/10/2013
    DKC-F710I-300KCM HP HP-300KCM-131011 NULL 159 11/10/2013

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    ci-joint le trie que j'attends et le trie qu'il me fourni

    Collections_sort_liste.xls

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer le code qui génère cette liste ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Salut,

    A la lecture de ta méthode compareTo, je note que tu compare suivant trois critères qui sont, dans l'ordre :

    1) La date

    2) Le client

    3) Le configCode

    Ton fichier de résultat montre que le résultat obtenu N'EST PAS bien trié par date.

    On va donc regarder comment tu tries les dates.

    Et là, surprises, tu compares deux String...

    Donc oui, c'est normal, 0 est avant 1, et 1 est avant 2. Donc "01/10/2013" est "plus petit que" "14/09/2013"

    Si tu veux comparer des dates, il faut comparer des objets de la classe Date:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    ...
     
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Date date1 = sdf.parse("01/10/2013");
    Date date2 = sdf.parse("14/09/2013");
     
    int dateCmp = date2.compareTo(date1);
                    if (dateCmp != 0) 
                         return dateCmp;
    ...

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Deux remarques :
    • Pourquoi utiliser des String pour stocker des dates ? La classe Date serait plus approprié (surtout si on veut les manipuler).
    • Pourquoi ne pas faire directement le tri via la requête SQL ?



    a++

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    Pourquoi ne pas faire directement le tri via la requête SQL ?
    c'est ce que j'ai fais adiGuba, voici ma requete sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlTouteLaListeAServir  = "SELECT PN,IDECLIENT,CONFIGCODE,NUMCONFIG,FLOOR(QTE_USED) as QTE_USED, CONVERT(VARCHAR(10),DATEXPED, 103) as DATEXPED  FROM V_CONFIG_CTO where PN in ('DKC-F710I-900JCM', 'DF-F850-3TNL', 'DKC-F710I-RK42', 'DF-F850-DBS', 'DF-F850-3HGSS', 'DKC-F710I-300KCM' ) ORDER BY DATEXPED, IDECLIENT, CONFIGCODE"
    vous avez raison pour les dates, je vais essayer la solution de Carhiboux et je vous tiens au courant

    en tout cas merci pour vos réponse

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Scrogneugneu de scrogneugneu alors!

    Pour comparer des dates, il faut comparer des objets de type Date et pas des chaines de caractère...

    C'est vrai en Java... ET EN SQL!


    Dans ta requête, tu compares les varchar que tu as crée avec CONVERT au lieu de comparer les vrais objets dates!

    Essayes :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT PN,IDECLIENT,CONFIGCODE,NUMCONFIG,FLOOR(QTE_USED) as QTE_USED, CONVERT(VARCHAR(10),DATEXPED, 103) as DATEXPED_TOCHAR  FROM V_CONFIG_CTO where PN in ('DKC-F710I-900JCM', 'DF-F850-3TNL', 'DKC-F710I-RK42', 'DF-F850-DBS', 'DF-F850-3HGSS', 'DKC-F710I-300KCM' ) ORDER BY DATEXPED, IDECLIENT, CONFIGCODE

    Comme ca, tu tries bien sur l'objet de type date DATEXPED et tu récupère ta date formatée comme tu le souhaites dans DATEXPED_TOCHAR.

    Et tu n'as plus besoin de trier ta liste en java.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    tu avais raison Carhiboux, j'ai utilisé les objet Date et tout marche nickel

    c'est des erreurs de débutant, je ferais plus attention aux types des objets que j'utilise d'aurénavant


    Grand merci à tous

  16. #16
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Carhiboux Voir le message
    Scrogneugneu de scrogneugneu alors!

    Pour comparer des dates, il faut comparer des objets de type Date et pas des chaines de caractère...

    C'est vrai en Java... ET EN SQL!


    Dans ta requête, tu compares les varchar que tu as crée avec CONVERT au lieu de comparer les vrais objets dates!
    dans ma requete je ne compare bien les vrais objets dates ce qui est fait dans le order by du select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT PN,IDECLIENT,CONFIGCODE,NUMCONFIG,FLOOR(QTE_USED) as QTE_USED, CONVERT(VARCHAR(10),DATEXPED, 103) as DATEXPED  FROM V_CONFIG_CTO where PN in ('DKC-F710I-900JCM', 'DF-F850-3TNL', 'DKC-F710I-RK42', 'DF-F850-DBS', 'DF-F850-3HGSS', 'DKC-F710I-300KCM' ) ORDER BY DATEXPED, IDECLIENT, CONFIGCODE
    c'est juste pour l'affichage que je convertis en String dans le select, quand j'exécute mon select dans sqlServer 2008 le trie est bien fait

    c'est côté que je devais reconvertir en Date si je ne veux pas changer mon select sinon je fais comme tu le dis c'est à dire je recupère les objets tel quel dans le select

  17. #17
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    A vrai dire, non, tu tries sur la valeur alpha de ta date puisque tu lui as affecté le même nom.
    Si tu veux trier sur la date source, change le nom affecté à la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...CONVERT(VARCHAR(10),DATEXPED, 103) as DATEXPEDITION
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Si tu comparais bien les objets DATE dans ta requête SQL, tu n'aurais pas eu besoin de passer par un tri en java...

    Si tu en as eu besoin, c'est bien que ta requête renvoyait un résultat non trié. Ou alors tu as fait du tri pour rien... mais j'en doute.

    Quand tu fais ton CONVERT(VARCHAR(10),DATEXPED, 103) as DATEXPED tu crées un Varchar qui se nomme comme ton champ de type Date DATEXPED.

    Alors après, pour savoir sur lequel il fait son order by, moi je sais pas dire comme ça, mais vu ton résultat, je parie une petite pièce qu'il le fait sur le varchar.

    J'ai pas de SQL server sous la main pour faire le test, mais j'ai fait le test sur une BDD oracle, c'est bien ça.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 72
    Points : 31
    Points
    31
    Par défaut
    oki d'accord, compris c'est noté

    encore merci

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

Discussions similaires

  1. classer une liste avec dates en liste avec périodes
    Par concombre_masqué dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/02/2010, 09h37
  2. Tri d'une zone de liste avec origine source : liste valeurs?
    Par electrosat03 dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/05/2009, 21h01
  3. rafraichir une view avec invalid display list
    Par john123 dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 03/02/2009, 23h47
  4. ajout d'une description pour des fichiers listes avec apache
    Par deny dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 31/10/2007, 10h16

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