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

avec Java Discussion :

Recuperer des données avec return


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Recuperer des données avec return
    Bonjour,
    S'il vous plait, je suis novice en java et j'ai fais un code et je voudrais recuperer le résultat avec la méthode return au lieu de system.out.println.
    Voici le code:
    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
    public void rechercheProduit(String lib) throws SQLException, ClassNotFoundException, IOException{
     
    		Class.forName("com.mysql.jdbc.Driver");
    		Properties p = new Properties();
    		p.load(getClass().getClassLoader().getResourceAsStream("ConfigBoutique.ini"));
    		this.name=p.getProperty("dbuser");
    		this.database = p.getProperty("database");
    		this.passdb = p.getProperty("dbpass");
    		Connection con = DriverManager.getConnection(database,name,passdb);
    		Statement stm = con.createStatement();
    		String reqI = "Select id, libelle, prix From Produit Where libelle LIKE '"+lib+"%'";
     
    	try{
    		ResultSet rs = stm.executeQuery(reqI);
     
    		while (rs.next()) {
    			int id = rs.getInt("id");
    			String libl = rs.getString("libelle");
    			float prix = rs.getFloat("prix");
    			System.out.println (id +" "+ libl + " " + prix);
    			}
    			rs.last();
    			int nbenr = rs.getRow();
    			if(nbenr<1){
    				System.out.println("Aucun produit ne correspond au recherche");
    			}
    	}catch(SQLException e){
    			System.out.println("Erreur de la requete");
    			e.printStackTrace();
    	}
    		finally{
    			if (stm !=null)stm.close();}
    	}
    Ce code répond à mes attentes mais je voudrais avoir le même résultat en déclarant la fonction
    public String rechercheProduit(String lib)
    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    bien tu crée une String qui contiens tout tes résultats et tu la retourne à la fin de t'a méthode.

    par contre fait peut être un tableau de String car les string sont limité en longueur

  3. #3
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    Dans ce cas, je dirais simplement de remplacer tes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("monTexte");
    par :

    En oubliant pas de changer le "void" en "String" pour le type de retour de ta fonction comme tu l'as précisé.

    Cependant la tu n'affichera aucun résultat.
    Pour afficher le résultat en console comme actuellement, tu vas devoir placer quelque part un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(rechercheProduit("tonString"));
    En éspérant t'avoir aidé...
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    le problème avec si il remplace les

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("monTexte");
    par des
    c'est qu'il ne vas pas avoir le resultat attendu car il y a un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("monTexte");
    dans une boucle si il place un return dans la boucle il n'y aura que le 1er résultat de retourné

  5. #5
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    exact... toutes mes excuses...

    rolfone a raison, dans ta boucle, si tu as peu d'éléments, tu peux declarer un String en dehor, et le remplir de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String output="";
    while(...){
          ...
          ...
          output=output+id+" "+libl+" "+prix+"\n";
    }
    return output;
    pour visualiser, un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.print(rechercheProduit("tonString"));
    maintenant si tu as un grand nombre d'éléments, et que tu en connais la taille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] output = new String[rs.length()]; // suivant le type de rs
    int i=0;
    while(...){
          ...
          ...
          output[i]=id+" "+libl+" "+prix;
          i++;
    }
    return output;
    Dans ce dernier cas, ton void deviendra String[] et non String. Pour visualiser tu devras parcourir ton tableau et afficher chaque élément (via une boucle for par exemple)

    A priori ca devrait être pas mal... même si j'ai du mal a écrire du code en dehors de mon petit eclipse lol.
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    j'ai modifier le code :
    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
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    import java.sql.Statement;
     
     
     
    public class verif {
     
    	/**
             * @param args
             * @throws SQLException 
             * @throws ClassNotFoundException 
             * @throws IOException 
             */
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		String h = "ec";
    		System.out.print(rechercheProduit(h));		
    	}
     
    public static String[][] rechercheProduit(String lib) throws ClassNotFoundException, SQLException{
     
    		Class.forName("com.mysql.jdbc.Driver");
    		String url = "jdbc:mysql://localhost:3306/test";
    		String	user = "root";
    		String pass = "osman";
    		Connection con = DriverManager.getConnection(url,user,pass);
     
    		Statement stm = con.createStatement();
    		String reqI = "Select id, libelle, prix From Produit Where libelle LIKE '"+lib+"%'";
     
    		ResultSet rs = stm.executeQuery(reqI);
    		String output[][] = new String[rs.getFetchSize()][1]; // suivant le type de rs
    		int i=0;
     
    		while (rs.next()) {
    			int id = rs.getInt("id");
    			String libl = rs.getString("libelle");
    			float prix = rs.getFloat("prix");
    			output[i][0]=id+" "+libl+" "+prix;
    		    i++;
    			}
    		return output;		
    	}
     
     
    }
    mais le probleme, ca me donne le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    	at verif.rechercheProduit(verif.java:43)
    	at verif.main(verif.java:21)
    Merçi

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    alors
    ça ne retourne pas le nombre de résultat récupéré avec la requête (du moins avec le JDBC SQL Serveur)

    alors tu a 2 techniques:

    au lieu de crée un tableau statique tu crée une Collection pour que celle si gère sa taille tout seul

    ou alors tu fait un petit count sql pour connaitre le nombre de ligne retourné par la request

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/09/2012, 23h04
  2. Réponses: 5
    Dernier message: 16/03/2010, 13h48
  3. Réponses: 3
    Dernier message: 08/03/2007, 08h51
  4. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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