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

Composants Java Discussion :

[JTable] Pagination avec de grosses quantités de données


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut [JTable] Pagination avec de grosses quantités de données
    Bonjour,

    J'ai un JTabbedPane qui comprends 4 onglets, chaque onglet contient une Jtable pour un produit. Je peux dans mon interface farire une recherche sur plusieurs produit donc le nombre de Jtable est mutiplier par le nombre de produit. Imaginos que l'utilisateur va choisir d'effectuer une recherche sur 4 produit ( c'est t'a dire que nous aurons 16 tables à afficher) : A noter aussi que chaque table contient énormément de ligne : ça peut aller jusqu'à 40 000 ligne par table ou plus.

    Mon problème réside donc sur la façon d'afficher les données. Je dois (je pense binesur ) afficher un nombre limité de ligne par table , avec un système de pagination ( un bouton suivant précédent). Et à chaque fois que je change de page, je dois aller requeter la base de données récupérer les résultat suivants et les affichers. Vu le nombre important de data, je ne pense pas pouvoir tout les stockers au même temps car cela prends énormément d'espace et aussi bq de temps d'exécution.

    Donc le problème pour résumer : comment faire un système de pagination efficace, et comment requéter la BDD pour récupérer les bon informations à afficher. dison par exemple que je veux afficher 3000 résultat par page.

    Merci beaucoup d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    ça dépend du sgbd que tu utilises.

    Pour MySql, tu peux utiliser LIMIT pour sélectionner un interval : à chaque fois que tu te déplaces en avant ou en arrière, tu fais varier l'offset de la taille de la "page" en plus ou en moins.

    Pour Oracle, par exemple, tu as une variable ROWNUM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM table
    WHERE ROWNUM>=premiereLigne AND ROWNUM <=derniereLigne;
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    J'utilise Sybase comme base de donnée.

    Qu'est ce que tu veux dire par : tu fais varier l'offset de la taille de la "page" en plus ou en moins. . Je n'ai pas très bien saisi

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je veux dire par faire varier l'offset que dans le principe tu définis un taille de page en lignes : par exemple, tu dis que tu affiches toujours 50 lignes.

    Au début tu affiches les lignes entre offset=1 et 50, inclus
    Ton bouton suivant fait offset + nombredelignes, soit offset + 50, et tu affiches les lignes de 51 à 100, etc...
    Ton bouton précédent fait offset - 50.

    Pour sybase, de mémoire il y SET ROWCOUNT pour fixer le nombre maximal de lignes, mais pas d'offset. Mais ça fait des lustres que j'ai pas fait de sybase. Il y a peut être une évolution.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    y'a select top 1000 * from table : je pense que cela fera l'affaire

    Je vais essayer la solution et je reviens pour dire si ça bien marché

    Sinon une dernière question : vu le problème que j'ai exposé, est ce que tu pense que ma proposition est la meilleur solution pour afficher les données dans la Jtable ou tu pense qu'il y'a mieux ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    A mon avis, c'est le mieux, surtout pour 40000 lignes. Maintenant il faut définir mieux aussi

    J'ai eu, selon les exigences de clients, à faire ce genre de trucs :
    - une pagination comme celle dont on parle, avec tri : du coup chaque fois qu'on changeait l'ordre de tri, il fallait refaire la requête
    - une demande qui nous obligeait à charger progressivement les lignes (donc pas de bouton précédent et suivant, et un thread de chargement, avec gestion spéciale du outofmemory)
    - une implémentation non paginée, tout en mémoire, donc avec chargement parallélisée également, mais possibilité de tri et de filtre en mémoire seulement quand tout est chargé (sans refaire la requête)
    - une implémentation ou on affiche les n premières, avec un bouton +, pour voir le reste
    - ...
    Chaque solution ayant ses avantages et ses inconvénients, du point du fonctionnel, comme du technique. De la à dire que l'une est meilleure que l'autre, difficile
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. ObservableCollection ajouter une grosse quantité de données
    Par draco951 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 08/10/2013, 15h14
  2. travail avec des grosses bases de données
    Par Rhyos dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2013, 10h22
  3. [Oracle] travail avec des grosses bases de données
    Par Rhyos dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/03/2013, 16h24
  4. Réponses: 19
    Dernier message: 06/11/2010, 22h07
  5. [EJB] Trop grosse quantités de données à transporter?
    Par saveriu dans le forum Java EE
    Réponses: 2
    Dernier message: 25/07/2009, 13h12

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