Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
767 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Afficher ds une JSP le résultat d'une requête par paquets de n lignes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher ds une JSP le résultat d'une requête par paquets de n lignes

n°190593
swgreedo
Posté le 06-08-2002 à 11:27:36  profilanswer
 

Tout est dans le titre : comme ce qui est fait sur n'importe quel site de vente en ligne, je souhaiterais afficher sur une JSP le résultat d'une grosse requête (plusieurs centaines de lignes par exemple) par paquets : par exemple 20 lignes par page, puis on doit cliquer sur "suivant" pour avoir les 20 suivantes,etc.
Je me demande par où commencer : est ce que la solution se situe dans la requête SQL, dans l'exploitation du ResultSet ? A priori, une solution en faisant un select sur la clé primaire (par exemple WHERE cle>valeur AND cle<=valeur+n) ne m'irait pas car je souhaiterais trier mes enregistrements.
 
J'utilise JDBC avec une base Access (meme si c'est pas possible sur une base comme ca, ca m'intéresserait de savoir comment on fait sur un SGBD qui va bien).
 
Merci...

mood
Publicité
Posté le 06-08-2002 à 11:27:36  profilanswer
 

n°190618
darklord
You're welcome
Posté le 06-08-2002 à 11:54:43  profilanswer
 

c'est assez simple.
 
Ta requete prendre un nombre maximum de resultats a prendre et l'index ou il faut démarrer.
 
 


---------------
Just because you feel good does not make you right
n°190688
gfive
Posté le 06-08-2002 à 13:19:02  profilanswer
 

Bah, a mon avis, garder le ResultSet ouvert, pkoi pas, mais tu es obligé de garder le Statement ouvert aussi, donc, la connection avec....Pas top top....
Après, tu peux choisir de faire une requête qui te renvoie les éléments du i° au j°...mais tu auras une requête par action sur le bouton "suivant" ou "précédent"
La troisième solution consiste à sauvegarder la totalité de tes résultats dans un objet, qui permet de récupérer les éléments qui t'intéressent...
Après, le choix de la solution dépend de plein de choses : 'poids' des requêtes, etc, etc..

n°190711
darklord
You're welcome
Posté le 06-08-2002 à 14:05:44  profilanswer
 

le truc c'est garder 100 000 résultats si tu regargede seuelemnt les 50 premier en moyenne c'est pas super efficient ...


---------------
Just because you feel good does not make you right
n°190713
swgreedo
Posté le 06-08-2002 à 14:10:46  profilanswer
 

Merci pour vos réponses.

Citation :


c'est assez simple.  
 
Ta requete prendre un nombre maximum de resultats a prendre et l'index ou il faut démarrer.  


Justement, c'est ça que je ne sais pas faire  :D  tu pourrais détailler un peu ?
 

Citation :


Bah, a mon avis, garder le ResultSet ouvert, pkoi pas, mais tu es obligé de garder le Statement ouvert aussi, donc, la connection avec....Pas top top....  


Ca ne me choque pas trop a priori. C'est de toute facon moins couteux que de redemander une connexion à chaque fois.
 

Citation :


Après, tu peux choisir de faire une requête qui te renvoie les éléments du i° au j°...mais tu auras une requête par action sur le bouton "suivant" ou "précédent"  


En mémorisant où j'en suis dans la session je pourrai m'en sortir avec une seule requete.
 

Citation :


La troisième solution consiste à sauvegarder la totalité de tes résultats dans un objet, qui permet de récupérer les éléments qui t'intéressent...  


Ca, je ne peux définitivement pas le faire : le nombre d'objets sauvegardés en mémoire est trop important (plusieurs centaines voire plusieurs milliers d'enregistrements).
 

Citation :


Après, le choix de la solution dépend de plein de choses : 'poids' des requêtes, etc, etc..


En fait je bosse sur un modèle générique d'architecture et je développe un petit exemple pas très significatif.En tout cas ce que je fais doit supporter des requetes retournant des résultats très importants (en nombre de lignes et de champs).

n°190749
El_gringo
Posté le 06-08-2002 à 15:12:20  profilanswer
 

En SQL, t'as rien pour dire que tu veux les résultats de n à m.
Par contre, les gros SGBD pallient à ce manque du SQL.
Genre, avec SQL Server, tu peux faire

SELECT TOP 50 * FROM MATABLE

(salut les p'tits clous :D) qui te sélectionnera les 50 premiers enregistrements (avec ça, tu peux te démerder pour faire une sélection des enregistrements du 50° au 100° avec des requètes imbriquées et un classement, j'développerai si tu veux !)
acec Oracle, j'crois que t'as une contrainte MAWROW ou ROWMAX:

SELECT * FROM MATABLE WHERE ROWMAX=50;


 
Sinon, pour ta mise en page, regarde un peu ça :
http://jsptags.com/tags/navigation/pager/

n°190757
gfive
Posté le 06-08-2002 à 15:27:53  profilanswer
 

Citation :


Ca ne me choque pas trop a priori. C'est de toute facon moins couteux que de redemander une connexion à chaque fois.


 
Faux!! Si tu as 25 péquins qui font la requête en même temps, et qui bloquent chacun une connection, qui a l'air d'un con???
 
 

Citation :


En mémorisant où j'en suis dans la session je pourrai m'en sortir avec une seule requete.
 
la troisième solution consiste à sauvegarder la totalité de tes résultats dans un objet, qui permet de récupérer les éléments qui t'intéressent...  
Ca, je ne peux définitivement pas le faire : le nombre d'objets sauvegardés en mémoire est trop important (plusieurs centaines voire plusieurs milliers d'enregistrements).


 
Bah, c'est un peu la même chose...
Ou sinon, tu te fais une API de recherche, qui gère un cache de résultats, tu sera moins emmerdé..

n°190759
swgreedo
Posté le 06-08-2002 à 15:30:42  profilanswer
 

Merci Gringo.
 :lol: pour les p'tits clous (ah la la, Marc Toesca, que de souvenirs)
 
Je viens d'essayer le coup du TOP dans Access, ca marche. Par contre pourrais tu développer ton histoire de "requetes imbriquées et de classement" STP ?

n°190766
swgreedo
Posté le 06-08-2002 à 15:37:01  profilanswer
 

GFive:
Que stockerais tu dans le cache ? une liste d'identifiants par exemple ? Parce que je ne peux pas me permettre de stocker des milliers objets en mémoire...
 
Autre chose : quand tu parles d' "une requête qui te renvoie les éléments du i° au j°", sais tu comment je pourrais le réaliser ?
Pour l'instant, j'arrive à faire ca du 1er au 50e enregistrement, mais apres...
 
J'en profite pour remercier tout le monde de m'aider.C'est la première fois que je poste une question et c'est vraiment sympa que des gens me répondent   :jap:

n°190771
El_gringo
Posté le 06-08-2002 à 15:41:46  profilanswer
 

swgreedo a écrit a écrit :

Merci Gringo.
 :lol: pour les p'tits clous (ah la la, Marc Toesca, que de souvenirs)
 
Je viens d'essayer le coup du TOP dans Access, ca marche. Par contre pourrais tu développer ton histoire de "requetes imbriquées et de classement" STP ?




 
Ouais, j'voulais pas développer pr rien, ms si ça t'interresse, c parti :
en fait, tu vas faire un truc du genre ça :
Rouge ---------------------------------------------->
Vert   -------------------------->
Bleu                     <------------
(merde, j'arrive mêmep as à metttre des couleurs ! :D)
 
Où on a, en rouge l'ensemble des enregistrements de ton select, en vert, la restriction par le 1er top, et en rouge les résultats que tu récupères à la fin.  
 
En rouge, c la requète :

SELECT * FROM MATABLE


 
En vert :

SELECT TOP 50 * FROM MATABLE ORDER BY UNCHAMP ASC

("UNCHAMP"  peut être ta clé primaire ou autre chose. c bien si ce champ a une valeur différente pr chaque enregistrement)
 
En bleu :

SELECT TOP 25 * FROM (SELECT TOP 50 * FROM MATABLE ORDER BY UNCHAMP ASC) ORDER BY UNCHAMP DSC

(UNCHAMP est 2 fois le même champ bien sur !)
 
J'ai pas testé, mais en gros, ça doit être un truc comme ça.


Message édité par El_gringo le 06-08-2002 à 15:47:40
mood
Publicité
Posté le 06-08-2002 à 15:41:46  profilanswer
 

n°190786
swgreedo
Posté le 06-08-2002 à 15:54:57  profilanswer
 

Merci  :jap:  
Je vais tester ca...

n°191547
wlitw
Posté le 07-08-2002 à 15:56:31  profilanswer
 

Tu peux aussi utiliser le ROWNUM ("select * from (select * from matable) where ROWNUM between 1 and 10", par exemple) dans ta requete SQL et faire un ptit dev JSP pour spécifier eventuellement le nombre d'enregistrements max, et définir le nombre de pages, etc ...
 
Edit : attention, à moins de passer par des vues, le ORDER BY sur un champ ne fonctionnera plus, le ORDER BY se fera systématiquement par le ROWNUM


Message édité par wlitw le 07-08-2002 à 15:58:35

---------------
Steam : wlitw77 - GoG : wlitw
n°191548
--greg--
Posté le 07-08-2002 à 15:59:09  profilanswer
 

El_Gringo a écrit a écrit :

 
 

SELECT TOP 25 * FROM (SELECT TOP 50 * FROM MATABLE ORDER BY UNCHAMP ASC) ORDER BY UNCHAMP DSC





el_gringo tu me déçois là
les requetes imbriquées spabieng  :non:  
c'est pas darklord qui va me contredire :D

n°191565
El_gringo
Posté le 07-08-2002 à 16:11:33  profilanswer
 

--greg-- a écrit a écrit :

 
el_gringo tu me déçois là
les requetes imbriquées spabieng  :non:  
c'est pas darklord qui va me contredire :D




 
...J'te déçois !?
Ouah, ça veut dire qu'un instant j'étais monté dans ton estime ? :D
 
Trève de conneries, t'as mieux comme solution pour SQL Server ?
Et, à part que c pas bien, tu reproches quoi aux requètes imbriquées ?
Parce que, niveau perfs, si tu veux une centaine d'enregistrements sur une base qui en a qqs millions, j'peux te dire que t gagnant, ms alors qqch de terrible !

n°191590
R3g
fonctionnaire certifié ITIL
Posté le 07-08-2002 à 16:23:46  profilanswer
 

Moi betement, j'aurais fait un bean contenant l'ensemble des resultats, attaché à la session, et dans lequel je vais piocher selon le numero de la page demandée...
Mais c'est sur que ca fait sortir et conserver tous les resultats pour n'en afficher que quelques-uns

n°191591
--greg--
Posté le 07-08-2002 à 16:24:14  profilanswer
 

ben je ne sais pas coment le truc là, TOP fonctionne mais bon.
admetton que tu as un champ ID dans ta table.
meme s'il nest pas "continu", tant que tu sais l'id a partir duquel tu veux afficher, c bon
 
tu fais ça

select top 20 * from tatable where id>X

en remplaçant X par l'id du dernier enregistrement affiché.
tout betement.

n°191593
--greg--
Posté le 07-08-2002 à 16:25:07  profilanswer
 

R3g a écrit a écrit :

Moi betement, j'aurais fait un bean contenant l'ensemble des resultats, attaché à la session, et dans lequel je vais piocher selon le numero de la page demandée...
Mais c'est sur que ca fait sortir et conserver tous les resultats pour n'en afficher que quelques-uns



jte dis pas la tronche de ton servuer avec 100 users et 10000 records dans ta table.
swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap

n°191605
R3g
fonctionnaire certifié ITIL
Posté le 07-08-2002 à 16:31:29  profilanswer
 

--greg-- a écrit a écrit :

jte dis pas la tronche de ton servuer avec 100 users et 10000 records dans ta table.
swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap swap  




En fait c'est ca mon probleme : ca fait deux mois que je fais des applis cote serveur, et j'ai jamais travaillé que sur un serveur de test ou je suis le seul user. Mais je me doutais quand meme que c'était pas la bonne solution hein..

n°191609
darklord
You're welcome
Posté le 07-08-2002 à 16:36:46  profilanswer
 

[:rofl]


---------------
Just because you feel good does not make you right
n°191645
R3g
fonctionnaire certifié ITIL
Posté le 07-08-2002 à 17:06:44  profilanswer
 

DarkLord a écrit a écrit :

 [:rofl]  




Ben koi, t'as jamais débuté ?

n°191648
El_gringo
Posté le 07-08-2002 à 17:09:37  profilanswer
 

--greg-- a écrit a écrit :

ben je ne sais pas coment le truc là, TOP fonctionne mais bon.
admetton que tu as un champ ID dans ta table.
meme s'il nest pas "continu", tant que tu sais l'id a partir duquel tu veux afficher, c bon
 
tu fais ça

select top 20 * from tatable where id>X

en remplaçant X par l'id du dernier enregistrement affiché.
tout betement.
 




 
Bah ouais, ms bon, 'faut admettre que t'as un champ ID !!!
Souvent on choisis pas soit même la structure de la base de données sur laquelle notre appli diot bosser (c mon cas, et je pense pas être le seul !)

n°191650
El_gringo
Posté le 07-08-2002 à 17:11:00  profilanswer
 

R3g a écrit a écrit :

Moi betement, j'aurais fait un bean contenant l'ensemble des resultats, attaché à la session, et dans lequel je vais piocher selon le numero de la page demandée...
Mais c'est sur que ca fait sortir et conserver tous les resultats pour n'en afficher que quelques-uns




 
Bah oui, mais sur les grosses tables (avec plein d'enregistrements), c la requète SQL qui est longue, donc l'intéret de répartir les resultats est nul si la requèete SQL est tjs la même !

n°191653
El_gringo
Posté le 07-08-2002 à 17:13:37  profilanswer
 

R3g a écrit a écrit :

 
Ben koi, t'as jamais débuté ?
 




 
Non, ms c vrai que tu devrais un peu tester ton appli ds le cas ou il y a plusieurs utilisateurs, on sait jammais, si ça s'trouve y aura plus d'une personne à la fois sur les web-apps que tu développes ! :D
Même si t tout seul, t'as des logiciels de tests qui permettent de simuler des requètes en simultané. Moi j'utilise JMeter (google power !), c un peu chiant à prendre en main, mais vachement bien.

n°191659
R3g
fonctionnaire certifié ITIL
Posté le 07-08-2002 à 17:18:40  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Non, ms c vrai que tu devrais un peu tester ton appli ds le cas ou il y a plusieurs utilisateurs, on sait jammais, si ça s'trouve y aura plus d'une personne à la fois sur les web-apps que tu développes ! :D
Même si t tout seul, t'as des logiciels de tests qui permettent de simuler des requètes en simultané. Moi j'utilise JMeter (google power !), c un peu chiant à prendre en main, mais vachement bien.




Non en fait je développe une appli pour mon patron, il sera le seul à s'en servir, mais comme le seul logiciel qu'il maitrise c'est Internet Explorer...

n°191660
--greg--
Posté le 07-08-2002 à 17:19:08  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Bah ouais, ms bon, 'faut admettre que t'as un champ ID !!!
Souvent on choisis pas soit même la structure de la base de données sur laquelle notre appli diot bosser (c mon cas, et je pense pas être le seul !)



y'a un minimum quoi, t'as bien un champ qui peut faire office d'id.
si y'en a pas c'est une erreur de conception ;)

n°191661
El_gringo
Posté le 07-08-2002 à 17:21:06  profilanswer
 

--greg-- a écrit a écrit :

y'a un minimum quoi, t'as bien un champ qui peut faire office d'id.
si y'en a pas c'est une erreur de conception ;)




 
Chez moi y en a pas.
Et c pas moi qui ai conçu !

n°191664
--greg--
Posté le 07-08-2002 à 17:23:48  profilanswer
 

R3g a écrit a écrit :

 
Ben koi, t'as jamais débuté ?
 




El_Gringo a écrit a écrit :

 
 
Non, ...



 
et a propos on vient me dire que je suis pretentieux!! :D


Message édité par --greg-- le 07-08-2002 à 17:24:03
n°191667
El_gringo
Posté le 07-08-2002 à 17:27:31  profilanswer
 

--greg-- a écrit a écrit :

 
et a propos on vient me dire que je suis pretentieux!! :D




 
Je m'suis fait un ennemi.
 
Un de nous 2 est de trop sur ce forum, gringo !
Dégaines si t un homme.

n°191668
--greg--
Posté le 07-08-2002 à 17:28:06  profilanswer
 

:gun:

El_Gringo a écrit a écrit :

 
 
Je m'suis fait un ennemi.
 
Un de nous 2 est de trop sur ce forum, gringo !
Dégaines si t un homme.



n°191669
--greg--
Posté le 07-08-2002 à 17:28:26  profilanswer
 

bon allez ça suffit le pourrissage de topic:)
ct pour rire hein  
 [:blandine]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Afficher ds une JSP le résultat d'une requête par paquets de n lignes

 

Sujets relatifs
Comment je peux afficher un message box dans mon coté client ASP.NET?Requete SQL ... for Power User
[MYSQL] comment tirer au hazard un certain nombre de lignesafficher une page web pdt l'excution de requetes sur le serveur
afficher une page web pdt l'excution de requetes sur le serveurPb de requete avec jointure
Listing de réponses d'une requête sur plusieurs pagesc quoi le code pour afficher une ligne
Trouver s'il existe des lignes avec un id < à une valeurComment afficher une ligne dans un pictureBox en ASP.net
Plus de sujets relatifs à : Afficher ds une JSP le résultat d'une requête par paquets de n lignes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR