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

JDBC Java Discussion :

Retourner un Resultset par une fonction


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut Retourner un Resultset par une fonction
    salut tout le monde
    j'ai un problème c'est que j'arrive pas a retourner un ResultSet par une fonction voila la portion du code :
    classe AcceeMysal
    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
     
        public static ResultSet chercher(){
        	ResultSet resultat=null;
        	try {
                Connection conn = getConnection("connect.conf");//retourne les parametre de la connction
                Statement stat = conn.createStatement();
                resultat = stat.executeQuery("SELECT * FROM membres WHERE nom='abdessamad'");
                stat.close();
                conn.close();
        }
        catch (SQLException ex) {
                while (ex != null) {
                        ex.printStackTrace();
                        ex = ex.getNextException();
                }
        }
        catch (IOException ex) {
               ex.printStackTrace();
        }
        return resultat;	
        }
    Apres je fais un appel depuis une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import java.sql.*;
     
    class TestBase{
     
    public static void main(String[] args) throws SQLException{
    	ResultSet r=AcceeMysql.chercher();
    	while(r.next())
    		System.out.println(r.getString("prenom"));
    	r.close();
    }
    }
    il m'affiche une erreur :
    Operation not allowed after ResultSet closed
    !!!!!plz help me
    meme lorsque je tente d'affciher le ResultSet a l'interieur de la fonction et en dehors du bloc try ca marche pas
    ce code retourne la meme erreur :

    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
     
        public static ResultSet chercher() throws SQLException{
        	ResultSet resultat=null;
        	try {
                Connection conn = getConnection("connect.conf");
                Statement stat = conn.createStatement();
                resultat = stat.executeQuery("SELECT * FROM membres WHERE nom='abdessamad'");
                stat.close();
                conn.close();
        }
        catch (SQLException ex) {
                while (ex != null) {
                        ex.printStackTrace();
                        ex = ex.getNextException();
                }
        }
        catch (IOException ex) {
               ex.printStackTrace();
        }
    	while(resultat.next())
    		System.out.println(resultat.getString("prenom"));
        resultat.close();
        return resultat;	
        }
    mais celui ci-dessous marche très bien :
    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
     
        public static ResultSet chercher(){
        	ResultSet resultat=null;
        	try {
                Connection conn = getConnection("connect.conf");
                Statement stat = conn.createStatement();
                resultat = stat.executeQuery("SELECT * FROM membres WHERE nom='abdessamad'");
            	while(resultat.next())
            		System.out.println(resultat.getString("prenom"));
                resultat.close();
                stat.close();
                conn.close();
        }
        catch (SQLException ex) {
                while (ex != null) {
                        ex.printStackTrace();
                        ex = ex.getNextException();
                }
        }
        catch (IOException ex) {
               ex.printStackTrace();
        }
        return resultat;	
        }

    l'idée c'est de pouvoir effectuer un recherche dans la base de données est retourner un ResultSet afin d'en profiter pour remplir des champs
    merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Points : 344
    Points
    344
    Par défaut
    Salut,

    Je pense que tu n'as pas compris l'utilisation de jdbc.

    Voici les etapes a suivre:
    1. Obtenir une connection
    2. Creer un statement
    3. Executer une requete (resultat = stat.executeQuery(...))
    4. Traiter le ou les resultats
    5. Fermer le statement et la connection.

    Tu essayes de faire 4 apres 5 et ce n'est pas possible.

    Suivant ce que tu veux faire apres tu peux implementer l'etape 4 comme suit:
    - appeler une factory qui va te creer les differents objects pour ta requete SQL et faire que ta methode retourne la liste d'object crée.
    - Soit tu passes un object a ta methode que tu initialise avec le resultset
    -...


    Par exemple:
    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
     
    public static List<MesMembres> chercher()
    	{
    	List<MesMembres> mesMembres=null;
    	Connection dbConnection = null;
    	Statement stmt = null;
    	ResultSet result = null;
    	try
    		{
    		dbConnection = getConnection("connect.conf");
    		stmt= dbConnection.createStatement();
    		result = stmt.executeQuery("SELECT * FROM membres WHERE nom='abdessamad'");
     
    		mesMembres=MesMembresFactory.create(result)
        }
    	catch (Exception ex)
    		{
    		ex.printStackTrace();
    		throw ex;
    		}
    	finally
    		{
    		// Clean up
    		if (result != null)
    			result.close();
     
    		if (stmt != null)
    			stmt.close();
     
    		if (dbConnection != null)
    			dbConnection.close();
    		}
     
    	return mesMembres;
    	}
    ---
    Farid

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    oki farid je vois que tu as utilise des listes et si vous pouvez me donner des liens pour comprendre comment travailler avec les listes parce que je suis débutant et j'ai jamais travaille avec les listes
    merci de votre soutien

  4. #4
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Tu as ces articles de la FAQ qui en parlent.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Points : 344
    Points
    344
    Par défaut
    Salut,

    Dans le lien que Guigui a mis, regarde dans un premier temps les ArrayLists pour la fonctionalite recherche.

    ---
    Farid

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    merci de votre reponse
    j'ai consulte le lien ci dessus,apres j'ai essayer d'utiliser les array liste voila la portion du code:
    classe AcceeMysql :
    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
     
        public static List<Hashtable<String, String>> chercher() throws Exception
        	{
        	List<Hashtable<String, String>> mesMembres=null;
        	Hashtable<String, String> formulaire = null;
        	Connection dbConnection = null;
        	Statement stmt = null;
        	ResultSet result = null;
        	try
        		{
        		dbConnection = getConnection("connect.conf");
        		stmt= dbConnection.createStatement();
        		result = stmt.executeQuery("SELECT * FROM membres");
        		if(result.next()){//ca ve dire qu'il ya au moins une ligne 
        			result.previous();
        			mesMembres=new ArrayList<Hashtable<String, String>>();
        			while(result.next()){
        				formulaire=new Hashtable<String,String>();
        				formulaire.put("nom",result.getString("nom"));
        				formulaire.put("prenom",result.getString("prenom"));
        				formulaire.put("date_naissance",result.getString("date_naissance"));
        				formulaire.put("sexe",result.getString("sexe"));
        				formulaire.put("activite",result.getString("activite"));
        				formulaire.put("phone",result.getString("phone"));
        				formulaire.put("date_entree",result.getString("date_entree"));
        				formulaire.put("prix",result.getString("prix"));
        				formulaire.put("nbrMoisPaye",result.getString("nbr_mois_paye"));
        				mesMembres.add(formulaire);
        			} 			
        		}
            }
        	catch (Exception ex)
        		{
        		ex.printStackTrace();
        		throw ex;
        		}
        	finally
        		{
        		// Clean up
        		if (result != null)
        			result.close();
     
        		if (stmt != null)
        			stmt.close();
     
        		if (dbConnection != null)
        			dbConnection.close();
        		}
     
        	return mesMembres;
        	}
    apres je peux faire un appel de la méthode chercher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	import java.util.*;
     
    	public class EssaiListe {
    	public static void main( String args[]) throws Exception {
    		List<Hashtable<String,String>> teste=AcceeMysql.chercher();
    		for(int i=0;i<teste.size();i++){
    			System.out.println(teste.get(i).get("nom")....);
                             //.......
     
    		}
     
    	}
    }
    comme vous avez remarque je crois que c'est pas la bonne façon et surement y'a des méthodes plus simple et rapide.
    la j'ai essayer de créer une liste et un tableau associatif(afin de pouvoir accéder a un champ par son nom),après je teste que le ReseltSet contient au mois une ligne,je commence de créer un hashtable et l'implémenter et finalement je l'insère dans ma liste.c'est bcp complique je sais,
    mais je sais pas comment je vais faire pour améliorer mon code parce que dans ma petite application j'ai besoin de consulter la base de données plusieurs fois et cela peut rendre l'application lente.
    c'est sur y'a des méthodes qui sont plus convenable dans telle situation
    merci de votre aide.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Points : 344
    Points
    344
    Par défaut
    Idealement tu ne devrais pas avoir besoin d'une hashtable.
    Prenons un exemple simple sans passer par une factory mais juste une java bean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Membre()
    	{
    	private String nom;
    	public String getNom() { return nom;}
    	public void setNom(String nom) { this.nom=nom;}
    	}
    la methode rechercher devient:
    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
     
    public static List<Membre> chercher() throws Exception
        	{
        	List<Membre> mesMembres=null;
        	Connection dbConnection = null;
        	Statement stmt = null;
        	ResultSet result = null;
        	try
        		{
        		dbConnection = getConnection("connect.conf");
        		stmt= dbConnection.createStatement();
        		result = stmt.executeQuery("SELECT * FROM membres");
    		while(result.next()) {
    			if (mesMembres == null)
    				mesMembres=new ArrayList<Membre>(50);
     
    			Membre membre=new Membre();
    			membre.setNom(result.getString("nom"));
     
    			mesMembres.add(membre);
        			} 			
            }
        	catch (Exception ex)
        		{
        		ex.printStackTrace();
        		throw ex;
        		}
        	finally
        		{
        		// Clean up
        		if (result != null)
        			result.close();
     
        		if (stmt != null)
        			stmt.close();
     
        		if (dbConnection != null)
        			dbConnection.close();
        		}
     
        	return mesMembres;
        	}
    Et ton main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public static void main( String args[]) throws Exception {
    	List<Membres> teste=AcceeMysql.chercher();
    	if (teste!=null)
    		for(int i=0;i<teste.size();i++){
    			System.out.println(teste.get(i).getNom());
    			//.......
    			}
    	}
    ---
    Farid

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    je vois alors la je dois créer une classe membre qui a des attributs caractérisant le membre nom,prenom...et après que j'effectue une recherche dans la base de données je vais créer une liste d'objet de type membre
    mais pr la derniere ligne de la boucle while je crois ke vous voulez dire
    mesMembres.add(Membre);
    merci de votre aide
    je vais aller chercher sur les factory
    merci encore

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Points : 344
    Points
    344
    Par défaut
    je vois alors la je dois créer une classe membre qui a des attributs caractérisant le membre nom,prenom...et après que j'effectue une recherche dans la base de données je vais créer une liste d'objet de type membre
    Oui l'idee etant de faire du ORM (Object-relational mapping) et de mapper une table a un object java (ici un java bean)
    cf: http://fr.wikipedia.org/wiki/Mapping_objet-relationnel

    mais pr la derniere ligne de la boucle while je crois ke vous voulez dire
    mesMembres.add(Membre);
    oups, erreur de copie/paste

    merci de votre aide
    je vais aller chercher sur les factory
    merci encore
    Je ne sais pas comment est ton projet car la solution que je t'ai montre n'est pas tres propre dans un projet globale, mais ca permet de voir comment les choses sont traité manuellement.

    Suivant la taille du projet et le temps que tu as, regarde du cote de hibernate ou autre ORM API, qui map des java beans a des tables dans une base.

    ---
    Farid.

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    merci de votre soutien

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

Discussions similaires

  1. [MySQL] Retourner un tableau par une fonction
    Par te-san dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2009, 16h26
  2. retourner un count() par une fonction PL/pgSQL ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 22/05/2007, 14h12
  3. valeur retournée par une fonction
    Par Biosox dans le forum C
    Réponses: 13
    Dernier message: 19/01/2007, 23h17
  4. retourner un vector a 2 dimensions par une fonction
    Par Psykotik dans le forum SL & STL
    Réponses: 7
    Dernier message: 18/11/2005, 17h45
  5. Réponses: 11
    Dernier message: 31/10/2005, 17h59

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