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

Java Discussion :

Stratégie pour afficher un grand nombre de données


Sujet :

Java

  1. #21
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Sinon, voici ma table

    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
     
    public class Table2 extends JTable{
     
        private JTableHeader header;
        private TableModel2 model;
        private String[] titles;
        private int LINEMIN ,begin, end;
     
        public Table2 () {}
        public Table2(String[] titles, DataBase database, String querry, int LINEMIN, Dimension view, int indexButtonAction, UnderFrame underFrame, Button[] buttons) {
            super();
            try {
                this.titles = titles;
                this.LINEMIN = LINEMIN;
     
                this.model = new TableModel2(querry ,titles, LINEMIN, false, database);
                //this.model = new TableModel(querry,titles, LINEMIN, webAccess, database);
                this.setModel(model);
                this.setRowSelectionInterval(begin, end);
                this.setPreferredScrollableViewportSize(view);
                this.setSelectionForeground(Color.WHITE);
                this.setDefaultRenderer(Object.class, new MyCellRenderer(this.getDefaultRenderer(Object.class)));
                this.setSelectionBackground(new Color(0,55,93));
                this.header = createDefaultTableHeader();
                header.setFont(new Font("SansSerif", Font.BOLD, 14));
                header.setForeground(Color.BLACK);
                this.setTableHeader(header);
            //for (int i=0; i<model.getData().length; i++) System.out.println(i+"    "+model.getData()[i][0].toString());
            }
            catch (IllegalArgumentException iae){iae.printStackTrace();}
        }
     
        @Override
        public void setRowSorter(RowSorter<? extends javax.swing.table.TableModel> sorter) {
            super.setRowSorter(sorter);
            this.setRowSelectionInterval(0, 0);
            this.setSelectionForeground(Color.WHITE);
            this.setSelectionBackground(new Color(0,55,93));
        }
     
        public TableModel2 getModel() {
            return model;
        }
        public void setModel(engine.models.TableModel tm){
            super.setModel(tm);
        }
        public void setModel (javax.swing.table.TableModel tm) {
            super.setModel(tm);
        }
     
        public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            System.out.println("prepared renderer  "+row);
            Object value;
            if (row<LINEMIN) 
                try{value = getValueAt(row, column);} catch(Exception e){value = null;e.printStackTrace();}
            else value = null;
            //System.out.println(value);
            boolean isSelected = false;
            boolean hasFocus = false;
     
            // Only indicate the selection and focused cell if not printing
            if (!isPaintingForPrint()) {
                isSelected = isCellSelected(row, column);
     
                boolean rowIsLead =
                    (selectionModel.getLeadSelectionIndex() == row);
                boolean colIsLead =
                    (columnModel.getSelectionModel().getLeadSelectionIndex() == column);
     
                hasFocus = (rowIsLead && colIsLead) && isFocusOwner();
            }
     
    	return renderer.getTableCellRendererComponent(this, value,
    	                                              isSelected, hasFocus,
    	                                              row, column);
        }
     
        public Component prepareEditor(TableCellEditor editor, int row, int column) {
            System.out.println("prepared editor");
            Object value = getValueAt(row, column);
            boolean isSelected = isCellSelected(row, column);
            Component comp = editor.getTableCellEditorComponent(this, value, isSelected,
                                                      row, column);
            if (comp instanceof JComponent) {
    	    JComponent jComp = (JComponent)comp;
    	    if (jComp.getNextFocusableComponent() == null) {
    		jComp.setNextFocusableComponent(this);
    	    }
    	}
    	return comp;
        }
    }

  2. #22
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    J'ai essayé d'utiliser ton code pour tester mais il manque la classe MyCellRenderer.

    Est ce que tu pourrais poster un code minimal qui n'utilise pas la base de données (des données en dur iront tres bien) ni MyCellRenderer ainsi qu'un code d'instanciation ? Avec de la chance, le probleme ne se posera pas et tu sauras dans quelle direction chercher. Et si le probleme se pose toujours, on pourra regarder ce qui se passe et t'aider sans avoir à faire 50 modifications au code qui feront que le probleme ne se produira peut etre pas...

    a+

  3. #23
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Je pense que c'est tes I/O qui consomment ton temps. Tu peux tordre ton code Swing dans tous les sens, Si ton resultset fait 200000 lignes, le temps consommé l'est en IO et dans l'instanciation de ce result set.
    A mon sens le meilleur axe d'optimisation ce situe au niveau de ta base de donné. La meilleure stratégie consiste a ne requêter que ce que tu vas afficher. Et construire tout autour de ce postulat. Je ne connais pas ta base ni les possibilités que tu as.

    Tu pourras optimiser ton code java pour gagner quelques centièmes. Mais si tu remontes que 100 lignes à chaque fois de façon optimisé par des ordres SQL et des tables optimisées, tu veras la différence. C'est à dire ne pas laisser jdbc faire son scroll et ne pas remonter 200000 lignes d'un coup.

    A noter que bien indexé une table c'est parfois le mal. Il faut regarder la stratégie d'accès. Des fois il peut faire du multi-index et créer une table temporaire, qui explose la mémoire disponible. On se retrouve avec des tables scans complet comme s'il n'y avais pas d'index.

  4. #24
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Avec une petite optimisation de la requête, mon resultset s'instancie en moins de 4 secondes. C'est correct !
    Concernant l'affichage, peu importe la base de donnée, si j'ai 200 000 lignes, même si elle sont vide, il faut que la table paraisse pleine. Donc le getValueAt sera invoqué. Et puis si je fais des petites requêtes, l'affichage ne sera pas fluide.

    Le MyCellRenderer, tu peux le virer, c'est pour avoir un rendu graphique.

    Pour les données en dur tu peux faire une petite boucle qui va écrire des données dans le tableau

  5. #25
    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
    Dans ta classe Table2 tu redéfinis la méthode setRowSorter().
    Tu utilises cela ? Si oui le comportement que tu décris est normal : pour trier ou filtrer les données il faut accéder à toutes les lignes, et donc parcourir toutes les données du modèle.

    Puisque tu utilises une requête SQL, il serait préférable de faire cela au niveau de la requête.

    Sinon, puisque tu utilises un resultset scrollable, tu peux obtenir le nombre de ligne très facilement en allant à la dernière ligne : Comment connaître le nombre de lignes/colonnes d'un ResultSet ?


    a++

  6. #26
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Effectivement, j'ai redéfini setRowSorter, car certaines fenêtres s'en servent. J'ai essayé de mettre le code en commentaire, mais les appels sont toujours faits

  7. #27
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour avoir l'appelant de otn getValueAt, faire

    new Exception("Saloperie d'appel").printStackTrace(out);

    avec out un streamwriter. Mieux vaut envoyer vers un fichier pour plus de tranquilité à la lecture

  8. #28
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Lol
    Je vais essayer ça. Au moins la console, je pourrais cliquer sur le lien qui mènes à l'instruction.
    Parce que juste New Exception("exeption") c'est géré dans l'appelant. J'étais parti dans une exécution ligne par ligne^^

  9. #29
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Ca y est j'ai trouvé !!!
    C'était un p***n de sorter qui trainait dans ma fenêtre !
    Du coup je l'ai viré et ça a arrêter d'appeler le getValueAt.
    Pour le trouver en fait j'ai mis mon throw new Exception dans une autre méthode et j'ai gérer l'exception dans getValueAt avant que l'autre méthode les l'intercepte !

    Merci bien en tout cas !!

    Par contre, mon affichage est de moins en moins fluide au fur et à mesure que je descends dans mon ResultSet (envoi d'une grande valeur en param pour absolute). Vous avez une idée ?

  10. #30
    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
    Citation Envoyé par oneagaindoguys Voir le message
    Par contre, mon affichage est de moins en moins fluide au fur et à mesure que je descends dans mon ResultSet (envoi d'une grande valeur en param pour absolute). Vous avez une idée ?
    Teste le temps mis pour faire le absolute+getString...
    Sinon regarde du coté du GC (en lançant ton application avec l'option -verbose:gc). Il se peut que cela soit dû à une grosse consommation mémoire.

    Le driver JDBC peut nécessiter un certain temps pour cela, et comme on est dans l'EDT cela bloque l'affichage. Il faudrait peut être utiliser un SwingWorker...



    a++

  11. #31
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Teste le temps mis pour faire le absolute+getString... --> environ 16ms

    a++
    Je comprends pas trop l'histoire du GC. Justement, le ResultSet, je le garde. C'est ce que me ma DB me renvoie. Je la garde en mémoire tant que la table est affichée. Quand je déplace le curseur dans le 1er quart, c'est bon, d'ailleurs, si je la baisse d'un coup, elle bloque nettement à ce niveau puis descends au niveau de la souris une seconde plus tard.

    SwingWorker pourquoi pas ? mais ce n'est pas pour autant que le temps de traitement soit si long.

    Je peux faire un swingUtility.invokeLater du remplissage de la fenêtre

  12. #32
    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
    Ca permettra juste de ne pas bloquer l'interface

    a++

  13. #33
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Oui, mais ça va afficher des ligne vide non ?

  14. #34
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    oui
    Pour le moment, tu a résolut ton premier problème: comment ne pas tout charger.
    Maintenant tu as un deuxième problème à résoudre: comme précharger une partie des données en supposant qu'elles auront beaucoup de chances d'être demandées

  15. #35
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    En fait, ce n'est pas le resultset qui prend le temps, mais placer la scroll bar à sa place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void goToLast(JScrollPane jsp){
            float ratio = this.getSelectedRow()/this.getRowCount();
            float maxScroll = jsp.getVerticalScrollBar().getMaximum();
            int value = (int) (ratio * maxScroll);
            jsp.getVerticalScrollBar().setValue(value);
    }

  16. #36
    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
    Heu... Tu fais ça quand ????

    a++

  17. #37
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Ça, c'est une fonctionnalité du logiciel qui permet d'aller directement sur la dernière ligne de la table (clic sur un bouton).

    J'avais essayé un swingWorker qui rempli au fur et à mesure en BG mon tableau d'objet en commençant par le bas car les temps d'accès à un résultset sont beaucoup plus long qu'un accès à un tableau primitif. (16ms contre <1ms !!). Mais le lancement (sw.execute() affiche le cadre de la fenêtre puis le contenu. Ça a pour effet d'obtenir la fenêtre à plus de 5 secondes...

    Il y a une autre fonctionnalité qui est le filtre de la table. Celle-ci étant triée sur la 1ere colonne, l'utilisateur entre un numéro dans un champs qui permettra de se rendre directement à la ligne où cette valeur se trouve. Pour cela, il y a un algo de recherche (dichotomie) qui va donc lire log(n) fois le résultset (ou le tableau si on est déjà passé par là) ! La première fois risque d'être difficile

  18. #38
    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
    Citation Envoyé par oneagaindoguys Voir le message
    Ça, c'est une fonctionnalité du logiciel qui permet d'aller directement sur la dernière ligne de la table (clic sur un bouton).
    Et si tu scrolles avec la souris c'est aussi long ? Il n'y a pas de raison à cela !?

    Au passage je ne comprend pas trop le calcul de cette méthode !?


    Citation Envoyé par oneagaindoguys Voir le message
    J'avais essayé un swingWorker qui rempli au fur et à mesure en BG mon tableau d'objet en commençant par le bas car les temps d'accès à un résultset sont beaucoup plus long qu'un accès à un tableau primitif. (16ms contre <1ms !!). Mais le lancement (sw.execute() affiche le cadre de la fenêtre puis le contenu. Ça a pour effet d'obtenir la fenêtre à plus de 5 secondes...
    code ???

    Citation Envoyé par oneagaindoguys Voir le message
    Il y a une autre fonctionnalité qui est le filtre de la table. Celle-ci étant triée sur la 1ere colonne, l'utilisateur entre un numéro dans un champs qui permettra de se rendre directement à la ligne où cette valeur se trouve. Pour cela, il y a un algo de recherche (dichotomie) qui va donc lire log(n) fois le résultset (ou le tableau si on est déjà passé par là) ! La première fois risque d'être difficile
    Comme on l'a déjà dit, il est préférable de passer par des critères supplémentaires dans la requête SQL... sinon il faut impérativement tout charger en mémoire.



    a++

  19. #39
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Et si tu scrolles avec la souris c'est aussi long ? Il n'y a pas de raison à cela !?
    C'est aussi long après le 1er quart de la scroll
    Citation Envoyé par adiGuba Voir le message
    Au passage je ne comprend pas trop le calcul de cette méthode !?
    Le calcul ordonne à la table de sélectionner sa dernière ligne (setRowSelectedInterval()) GetValueAt est invoqué, et comme j'ai mis un SwingWorker à charger la mémoire en BG, j'ai un gain de temps d'accès (mais une fenêtre qui apparait difficilement;

    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
     
     
    sw = new SwingWorker () {
                @Override
                protected Object doInBackground() throws Exception {
                    System.out.println("doInBg");
                    for (int i = maxDataCount-1 ; i>=0; i--) {
                            if (dataCopy[i][0]==null) {
                                for (int j=0; j<dataCopy[0].length; j++) {
                                try {
                                    data.absolute(i+1);
                                    dataCopy[i][j] = data.getString(j+1);
                                }
                                catch( SQLException sql){System.out.println(i+"   "+j);sql.printStackTrace();}
                                }
                            }
                        }
                    return null;
                }
            };
    sw.execute();
    Citation Envoyé par adiGuba Voir le message
    Comme on l'a déjà dit, il est préférable de passer par des critères supplémentaires dans la requête SQL... sinon il faut impérativement tout charger en mémoire.



    a++
    Un critère supplémentaire qui changerait quoi ? Le problème est que l'utilisateur n'a aucune idée de la ligne qu'il recherche !

  20. #40
    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
    Citation Envoyé par oneagaindoguys Voir le message
    C'est aussi long après le 1er quart de la scroll
    Et le problème ne vient pas de getValueAt() ????


    Citation Envoyé par oneagaindoguys Voir le message
    Un critère supplémentaire qui changerait quoi ? Le problème est que l'utilisateur n'a aucune idée de la ligne qu'il recherche !
    Ben comment il fait avec ton filtre ????

    Je l'ai déjà dit : si tu tries/filtres avec un RowSorter tu dois d'abord récupérer toutes les données et c'est forcément long.

    En déplaçant ce critère dans la requête SQL tu bénéficies des avantages de ton SGBD...


    a++

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [2000] Meilleure méthode pour insérer un grand nombre de lignes
    Par nicodev24 dans le forum Développement
    Réponses: 11
    Dernier message: 31/10/2016, 11h25
  2. Pb pour lire un grand nombre de données
    Par seb111983 dans le forum JDBC
    Réponses: 12
    Dernier message: 28/09/2010, 21h57
  3. Requête pour modifier un grand nombre d'entrée
    Par gatsu00 dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/11/2007, 09h47
  4. Type PostgreSQL pour stocker des grands nombres
    Par K-Kaï dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/06/2006, 20h26
  5. [Stratégie] Manipulation d'un grand nombre d'objet
    Par Aldouille31 dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2006, 13h01

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