Probleme avec ResultSet

mosis -  
 FFabrice -
Bonjour,

j'ai l'erreur suivante lors de l'exexution "GRAVE: java.sql.SQLException: Ensemble de résultats épuisé" .
Je travaille sur une apllication web jsp et servlet sous netbeans.

voila le bout de code

public client rechercher_client(String libelle){
    client cl=new client();
    class_db db=new class_db();
    try {             
        db.connection();//connexion a la base de donnees        ncli ='%"+libelle+"%' or nd like'%"+libelle+"' or%
    //    String req="select * from RECO.CLIENT where CLIENT.nom like '%"+libelle+"%' and rownum<2" ;
      
        String sql="select  'ncli','ndos','nd','lprod','lart','nbterm','nom','prenom1','datms_ld','datdeb_ld','groupe_fact','ctarif',"+
        "'ltarif,mnt_abo','lcat','lprof','lgest','code_portefeuille','nvoie','adresse1','adresse2','adresse3','compl_adr','contact','mnt_ht_fact' from client where nom like '%"+libelle+"%' and rownum<2" ;
        System.out.println(sql);
        ResultSet res=db.ExcecutSelect(sql);// execution et remplissage du resultset
        System.out.println(res.next());
        if (res.next())
        {
            //ajouter les donnees a l'objet client
       cl.setNcli(res.getString("ncli"));
        cl.setNdos(res.getString("ndos"));
        cl.setNd(res.getString("nd"));
        cl.setLprod(res.getString("lprod"));
        cl.setLart(res.getString("lart"));
        cl.setNbterm(res.getString("nbterm"));
        cl.setNom(res.getString("nom"));
        cl.setPrenom(res.getString("prenom1"));
        cl.setDatems_ld(res.getString("datms_ld"));
        cl.setDatedeb_ld(res.getString("datdeb_ld"));
        cl.setGroupe_fact(res.getString("groupe_fact"));
        cl.setCtarif(res.getString("ctarif"));
        cl.setLtarif(res.getString("ltarif"));
        cl.setMnt_abo(res.getString("mnt_abo"));
        cl.setLcat(res.getString("lcat"));
        cl.setLprof(res.getString("lprof"));
        cl.setLgest(res.getString("lgest"));
        cl.setCode_portf(res.getString("code_portefeuille"));
        cl.setNvoie(res.getString("nvoie"));
        cl.setAdresse1(res.getString("adresse1"));
        cl.setAdresse2(res.getString("adresse2"));
        cl.setAdresse3(res.getString("adresse3"));
        cl.setComp_adr(res.getString("compl_adr"));
        cl.setContact(res.getString("contact"));
        cl.setMnt_ht_fact(res.getString("mnt_ht_fact"));
        }
        res.close();      
        System.out.println("nom: "+res.getString("ndos"));
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    db.fermerconnexion();
    return cl;
}

8 réponses

FFabrice
 
Salut déjà pourquoi tu fais un if(res.next())...ca veux dire que qu'il test juste si le resultSet contient un élément suivant ce que tu dois faire c'est plûtot un while(res.next()) un if test qu'une seule fois alors qu'un while c'est une boucle.
Et avec le code que tu as je te conseil d'utiliser un ResultSetMetaData il te permettra d'recuperer le resultat dans un vector et c'est plus souple à gerer.
PS:Fais pas res.next() en dehors de la boucle il fermera la base de données avant que tu y entres.
1
mosis
 
merci pour la reponse mais ca ne passe pas
0
choubaka Messages postés 5526 Date d'inscription   Statut Modérateur Dernière intervention   2 106
 
res.next() renvoie bien un booléen mais je ne crois pas que la fait de l'utiliser comme condition soit judicieux.

Cette méthode sert à bouger le curseur d'une ligne. On l'utilise surtout dans une boucle "While"

Je ne sais pas le tester, mais c'est une possibilité.
0
mosis
 
res.next() me retourne true donc le resultset prend le resultat de la requete qui me retourne une seule ligne .
Le souci est que je n'arrive pas a mettre ca dans l'objet client .
Il semble que le resultset se vide aussitot apres.

Je suis en stage et l'application doit etre déployé dans le réseau dès demain.
Au secour aidez moi a trouver la solution
0
FFabrice
 
c'est ce que je t'ai dit t'as fait un if au lieu d'un while ou un do donc il entre une seule fois et ressort en fermant ta base de données d'où ta seule ligne et ton exception fait comme je t'ai dit plus haut
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
choubaka Messages postés 5526 Date d'inscription   Statut Modérateur Dernière intervention   2 106
 
essaye de faire un "print" de ce qui ressort de ton rs.
ça permettra de voir ce qui en ressort...
0
mosis
 
salut
merci
J'ai fais un print(rs.next) ca me retourne true.
Si tu vois bien FFabrice ma requete retourne une seule ligne c'est pour cela que j'ai utilisé if .mais je vais tester avec while et utiliser un ResultSetMetaData.

Je vous tiens au courant
0
mosis
 
Les ligne INFO provienne de l'affichage System.out.println()

INFO: connexion etablie
INFO: select * from client where nom like '%DIENG%' //affichage requete
INFO: Requete executee correctement
INFO: true // resultSet
INFO: nom: DIENG //rs.getString("nom");

Voici la nouvelle exeption
GRAVE: java.sql.SQLException: Nom de colonne non valide
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:226)
        at oracle.jdbc.driver.OracleStatement.get_column_index(OracleStatement.java:3098)
        at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1853)
        at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1558)
        at sonatel.client.rechercher_client(client.java:433)
        at org.apache.jsp.resultat_005frecherche_jsp._jspService(resultat_005frecherche_jsp.java from :76)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483)


Je vous en prie faites kelk choz
0
FFabrice
 
prends mon msn envoie moi ton code et je te résous ton problème.
ray_fab@hotmail.fr
0