Probleme de out of MEMORYERROR lors de l'affichage de 37000 lignes

cs_saindou Messages postés 11 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 2 septembre 2012 - 16 mai 2009 à 15:40
cs_saindou Messages postés 11 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 2 septembre 2012 - 18 mai 2009 à 16:17
Bonjour à tous!
j'ai un projet en java/flexBuilder3,tout marche bien jusqu'à ce que j'ai voulu chargé 37000 lignes d'une base de données SQLSErver2005,pour l'afficher sur un interface Flex,j'ai une erreur de OUT of MEMORY depuis java(je charge avec hibernate 3).
j'ai essayé d'augmenter la memoire jmv avec une machine de RAM 512M,avec le fichier de config.jmv et aussi eclipse.ini rien ne marche.
j'ai essayé de decoupé les données appeler la methode à 5 fois pour afficher,le chargement arrive à 2500 et s'arrete et donne un la mm erreur.
Et depuis là je suis totalement bloqué,si quelqu'un pourrait m'aider à surmoter ce probleme qu'il m'envoie un code en java(hibernate) et action script 3

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 mai 2009 à 17:47
Salut,

Quel est l'intérêt d'afficher 37000 lignes dans une interface ?

Tu crois que les utilisateurs vont consulter ces 37000 lignes ???

La solution est de faire comme tout le site font : paginer les résultats, et faire des filtres pour n'afficher que les lignes voulues.
0
cs_saindou Messages postés 11 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 2 septembre 2012
17 mai 2009 à 17:46
salut!
je suis d'acord avec toi ,je n'arrive pas à faire cette pagination.
Pourriez vous m'envoyer un code en java(hibernate),et AS3,ou m'expliquer comment je peux le faire.
Voilà mon code en java:
  public  List getPersonDoss(){
       List list=null;
       System.out.print("appel methode");
      session.getTransaction().begin();
        try{
      Query query =session.createQuery("from Personnes");
       list =query.list();
                }catch(HibernateException ex){
      ex.printStackTrace();
      }
      return list;
   
 }

En AS3

    function recupererPersonnesParTranche(){
        personneslistResult=new ArrayCollection();
        PD.getPersonDoss();
  
     }
    
     function retourPersonnes(event:ResultEvent){
             
      personneslistResult=ArrayCollection(event.result); 
     }
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 mai 2009 à 17:49
Query query =session.createQuery("from Personnes");
query.setFirstResult(100);
query.setMaxResults(50);
List pageResults= query.list();
0
cs_saindou Messages postés 11 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 2 septembre 2012
18 mai 2009 à 16:17
salut !
Merci beaucoup pour votre aide,ça m'a bcp aidé.
Voilà mon code en java:
public

List getPersonDoss(
int firstResult,String Etablissement){List pageResults=

null ;

session.getTransaction().begin();

try{

//Query query =session.createQuery("from Personnes");
//list query.list();Query query

session.createQuery(
"from Personnes where groupe='"+Etablissement+
"' or sousgroupe='"+Etablissement+
"'");query.setFirstResult(firstResult);

query.setMaxResults(2500);

pageResults= query.list();

System.

out .print(
"nobre pers:"+pageResults.size());}

catch (HibernateException ex){ ex.printStackTrace();

}

return pageResults; }

}

en Action Stricpt:

public
var Etablissement:String;[

Bindable]

public
var personneslistResult:ArrayCollection =
new ArrayCollection();

var toutesLesPersonnesChargees:Boolean=
false ;

var firstResult:int =0;

var trancheCourante:ArrayCollection;

function recupererPersonnesParTranche(){PD.getPersonDoss(firstResult ,Etablissement);

Alert.show(Etablissement);

}

function retourPersonnes(event:ResultEvent){

if(event.result= =
null ){toutesLesPersonnesChargees =

true;}

else{

try{trancheCourante= ArrayCollection(event.result);

for
each(
var obj:Object
in trancheCourante)personneslistResult.addItem(obj);

if(!toutesLesPersonnesChargees && trancheCourante! =
null && ArrayCollection(event.result).length>0){firstResult+= 2500;

PD.getPersonDoss(firstResult ,Etablissement);

}

}

catch (err:Error){toutesLesPersonnesChargees =
true;}}

}
0
Rejoignez-nous