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 :

Renvoyer valeur depuis méthode void


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut Renvoyer valeur depuis méthode void
    Bonjour à tous,
    Je voudrais pouvoir renvoyer une valeur depuis une méthode Void, je sais que Void ne renvoie rien mais comment faire dans ce cas ?
    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
    public class AccessBase extends FenetrePret {
     
    	
    		public static void extraireTaux() {
    			
    			  try {
    				
    		        	Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();
    				
    			      }
    			    catch (ClassNotFoundException e)
    			    {
    			    	System.out.println("// La classe n'existe pas \n");
    			    }
    			    catch (InstantiationException e)
    			    {
    			    	System.out.println("La classe est abstract ou est une interface ou n'a pas de constructeur accessible sans paramètre \n");
    			    }
    			    catch (IllegalAccessException e)
    			    {
    			    	System.out.println("// La classe n'est pas accessible \n");
    			    }
    			  try {
         			Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true");
    			    System.out.println("Connection Etablie! \n");
    			    String catalogName =cn.getCatalog(); // cn.setCatalog("Commandes");
    			    String An=cboAnnees.getSelectedItem().toString();
    			    String sql1="Select Taux from T_Taux where Annee = ?";
    			    PreparedStatement ps=cn.prepareStatement(sql1);//Requête avec paramètres
    			    ps.setString(1,An);
    			    ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
    			    
        		  while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    				}
    				rs.close();
    			  }
    			      catch (SQLException e) {
    			    	  System.out.println("Impossible de se connecter à la base");
    			     	  e.printStackTrace();
    				}
    			  
    	
    }
    C'est la valeur rs.getString(1) que je voudrais renvoyer vers la classe maitresse FenetrePret2 qui étend FenetrePret, j'ai essayé des get mais ca ne marche pas.
    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
     
    public class FenetrePret2 extends FenetrePret {
    //Constructeur
    	public FenetrePret2() {
    		cboAnnees.addActionListener(new GesListe());
    		txtTaux.setEditable(false);
    		txtTaux.setBackground(new Color(114,227,87));
    		//cmdCalculer.setVisible(false);
    		this.setTitle("Mensualité d'un prêt à taux mensuel fixe2");		
    	                      }	
    	private class GesListe implements ActionListener{//Classe Interne
    		@Override 
    		public void actionPerformed(ActionEvent e) {		
     
     
    		       AccessBase.extraireTaux();
     
    		        }                                                 }
    }
    Si quelqu'un a une idée Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Non, une méthode void ne peut pas retourner de valeur. Quand on définit une méthode de type void, c'est justement qu'on ne veut pas retourner de valeur.

    Si tu fais une méthode qui doit retourner une valeur, alors donne un type de retour correspondant à cette valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static String extraireTaux() {
     
         /* ... */
         return une valeur de type String
     
    }
    Dans ton code, la valeur à retourner est obtenu via une requête SQL, ici dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    				}
    Bien sûr, on suppose que la requête retourne bien un seul résultat au plus, sinon ça n'aurait pas de sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if(rs.next()) {
    			    	return rs.getString(1) ;
    }
    else {
          return null; // la requête pourrait ne retourner aucun résultat, on choisit de retourner null dans ce cas (tu pourrais retourner une valeur par défaut aussi)
    }
    Attention aussi à prévoir de retourner une valeur en cas d'erreur (null par exemple).


    En revanche, je m'interroge sur le type de taux. Est-ce vraiment String ? Pourquoi pas un numérique ?

    Ensuite, attention avec la libération des ressources (l'appel de close()). Dans ton code, en cas d'erreur, close() n'est pas appelé. Ceci pourrait causer le stockage inutile en mémoire de ressource, tant que le programme tourne. Au bout d'un moment, la mémoire pourrait être saturée. Il faut bien fermer toutes les ressources, pas seulement le ResultSet. L'appel de close() sur un Statement ferme le Statement et tous les ResultSet ouvert avec. L'appel de close() sur une Connection, ferme tous les Statement, donc aussi tous les ResultSet

    Ceci peut être éviter en utilisant une structure trt-with-resources :
    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
     
    public static String extraireTaux() {
     
    try {
     
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();
     
    }
    catch (ClassNotFoundException e) {
        System.out.println("// La classe n'existe pas \n");
    }
    catch (InstantiationException e) {
    			    	System.out.println("La classe est abstract ou est une interface ou n'a pas de constructeur accessible sans paramètre \n");
    }
    catch (IllegalAccessException e) {
    			    	System.out.println("// La classe n'est pas accessible \n");
    }
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
        System.out.println("Connection Etablie! \n");
        String catalogName =cn.getCatalog(); // cn.setCatalog("Commandes");
        String An=cboAnnees.getSelectedItem().toString();
        String sql1="Select Taux from T_Taux where Annee = ?";
        PreparedStatement ps=cn.prepareStatement(sql1);//Requête avec paramètres
        ps.setString(1,An);
        ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
     
        if(rs.next()) {
            return rs.getString(1);
        }
    }
    catch (SQLException e) {
        System.out.println("Impossible de se connecter à la base");
        e.printStackTrace();
    }
    return null; // en cas d'erreur ou si aucune réponse dans la requête
    }

    A noter également qu'avec un pilote de type 4 le "Class.forName" n'est pas utile pour charger le pilote. Cela allégerait ton code que de l'enlever. Et même s'il est obligatoire, tu devrais le faire dans une méthode à part, lancée au démarrage du programme, de manière à éviter de le faire à chaque fois que tu fais une requête.

    Réfléchis également au moyen de n'utiliser qu'une seule connexion, au lieu d'en créer une à chaque requête. Créer une connexion est une opération relativement lourde et consommatrice de ressource (temps, mémoire), on évite d'en créer tout le temps. On peut en conserver une utilisée par toutes les requête, ou faire un pool si on veut pouvoir faire plusieurs requêtes simultanées.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Bonjour et merci pour ton aide
    J'ai modifié la méthode et maintenant ca fonctionne
    Pour répondre à tes remarques :
    Citation Envoyé par joel.drigo Voir le message
    En revanche, je m'interroge sur le type de taux. Est-ce vraiment String ? Pourquoi pas un numérique ?
    Oui car la conversion est traitée dans la classe maitresse FenêtrePret :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    try {
    				   taux=Float.parseFloat(txtTaux.getText())/100;
    Ensuite, attention avec la libération des ressources (l'appel de close()). Dans ton code, en cas d'erreur, close() n'est pas appelé. Ceci pourrait causer le stockage inutile en mémoire de ressource, tant que le programme tourne. Au bout d'un moment, la mémoire pourrait être saturée. Il faut bien fermer toutes les ressources, pas seulement le ResultSet. L'appel de close() sur un Statement ferme le Statement et tous les ResultSet ouvert avec. L'appel de close() sur une Connection, ferme tous les Statement, donc aussi tous les ResultSet

    Ceci peut être éviter en utilisant une structure trt-with-resources :
    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
     
    public static String extraireTaux() {
     
    try {
     
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();
     
    }
    catch (ClassNotFoundException e) {
        System.out.println("// La classe n'existe pas \n");
    }
    catch (InstantiationException e) {
    			    	System.out.println("La classe est abstract ou est une interface ou n'a pas de constructeur accessible sans paramètre \n");
    }
    catch (IllegalAccessException e) {
    			    	System.out.println("// La classe n'est pas accessible \n");
    }
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
        System.out.println("Connection Etablie! \n");
        String catalogName =cn.getCatalog(); // cn.setCatalog("Commandes");
        String An=cboAnnees.getSelectedItem().toString();
        String sql1="Select Taux from T_Taux where Annee = ?";
        PreparedStatement ps=cn.prepareStatement(sql1);//Requête avec paramètres
        ps.setString(1,An);
        ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
     
        if(rs.next()) {
            return rs.getString(1);
        }
    }
    catch (SQLException e) {
        System.out.println("Impossible de se connecter à la base");
        e.printStackTrace();
    }
    return null; // en cas d'erreur ou si aucune réponse dans la requête
    }
    Sauf erreur j'arrive à la même écriture que toi à part le While :
    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
     
    public static String extraireTaux() {
     
    			  try {
     
    		        	Class.forName("net.ucanaccess.jdbc.UcanaccessDriver").newInstance();
     
    			      }
    			    catch (ClassNotFoundException e)
    			    {
    			    	System.out.println("// La classe n'existe pas \n");
    			    }
    			    catch (InstantiationException e)
    			    {
    			    	System.out.println("La classe est abstract ou est une interface ou n'a pas de constructeur accessible sans paramètre \n");
    			    }
    			    catch (IllegalAccessException e)
    			    {
    			    	System.out.println("// La classe n'est pas accessible \n");
    			    }
    			  try {
         			Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true");
    			    System.out.println("Connection Etablie! \n");
    			    String catalogName =cn.getCatalog(); 
    			    String An=cboAnnees.getSelectedItem().toString();
    			    String sql1="Select Taux from T_Taux where Annee = ?";
    			    PreparedStatement ps=cn.prepareStatement(sql1);//Requête avec paramètres
    			    ps.setString(1,An);
    			    ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
        		  while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
        		  }
    			  rs.close();  		  			                  }
    			      catch (SQLException e) {
    			    	  System.out.println("Impossible de se connecter à la base");
    			     	  e.printStackTrace();
    				}
    			return null;
     
    	                                       }
    Petite question au passage : à quoi sert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String catalogName =cn.getCatalog();
    A noter également qu'avec un pilote de type 4 le "Class.forName" n'est pas utile pour charger le pilote. Cela allégerait ton code que de l'enlever. Et même s'il est obligatoire, tu devrais le faire dans une méthode à part, lancée au démarrage du programme, de manière à éviter de le faire à chaque fois que tu fais une requête.



    Réfléchis également au moyen de n'utiliser qu'une seule connexion, au lieu d'en créer une à chaque requête. Créer une connexion est une opération relativement lourde et consommatrice de ressource (temps, mémoire), on évite d'en créer tout le temps. On peut en conserver une utilisée par toutes les requête, ou faire un pool si on veut pouvoir faire plusieurs requêtes simultanées.
    Je vais y réfléchir et je te donnerai ma solution si j'en trouve bien sûr
    Merci encore pour tes infos

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    Oui car la conversion est traitée dans la classe maitresse FenêtrePret :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    try {
    				   taux=Float.parseFloat(txtTaux.getText())/100;
    C'est plus logique de convertir la valeur au plus tôt. Avoir une méthode getTaux() qui retourne du float (ou du numérique plus généralement) est plus logique que du String qu'on convertit plus tard. En particulier si on utilise getTaux() à différents endroits.

    Citation Envoyé par xeron33 Voir le message
    Sauf erreur j'arrive à la même écriture que toi à part le While :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
    }
    est équivalent en terme d'exécution à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
    }
    mais faire une boucle pour retourner dès la première itération est moins logique que de faire un if. Une boucle c'est fait pour boucler, pas pour faire un if.

    Sinon on écrit des while chaque fois qu'on veut faire des if et le programme devient moins compréhensible.

    Mon code est différent du tien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
        /* tout le début du code... */
    ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
     
        if(rs.next()) {
            return rs.getString(1);
        }
    }
    catch (SQLException e) {
        System.out.println("Impossible de se connecter à la base");
        e.printStackTrace();
    }
    Ce code garantit que cn sera fermée, donc ps, donc rs, même en cas d'erreur (SQLException). Le tien non (aucune ressource n'est libérée).
    Il ne garantissait que les ressources de rs soient libérées lorsque tout se passait bien. Plus rien n'est libéré lorsque le taux est trouvé maintenant qu'il y a un return dans le while (on sort de la fonction sans passer par l'appel de rs.close()).

    Citation Envoyé par xeron33 Voir le message
    Petite question au passage : à quoi sert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String catalogName =cn.getCatalog();
    Je ne sais pas. C'était dans ton code d'origine, je n'ai fait que copier/coller le tien.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    C'est plus logique de convertir la valeur au plus tôt. Avoir une méthode getTaux() qui retourne du float (ou du numérique plus généralement) est plus logique que du String qu'on convertit plus tard. En particulier si on utilise getTaux() à différents endroits.
    Oui mais j'ai repris une petite application crée en formation que j'essaie de faire évoluer pour ne pas perdre l'acquis, j'ai donc créer une classe fille qui hérite du code ou se trouve cette conversion(FenêtrePret) et (FenetrePret2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
    }
    est équivalent en terme d'exécution à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
    }
    mais faire une boucle pour retourner dès la première itération est moins logique que de faire un if. Une boucle c'est fait pour boucler, pas pour faire un if.

    Sinon on écrit des while chaque fois qu'on veut faire des if et le programme devient moins compréhensible.
    La aussi j'ai repris du code utilisé pour se connecter sur une base SQLServer, dans mon cas de récupération d'un taux le if est plus logique.

    Mon code est différent du tien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
        /* tout le début du code... */
    ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
     
        if(rs.next()) {
            return rs.getString(1);
        }
    }
    catch (SQLException e) {
        System.out.println("Impossible de se connecter à la base");
        e.printStackTrace();
    }
    Le tien non (aucune ressource n'est libérée).
    Il ne garantissait que les ressources de rs soient libérées lorsque tout se passait bien. Plus rien n'est libéré lorsque le taux est trouvé maintenant qu'il y a un return dans le while (on sort de la fonction sans passer par l'appel de rs.close()).
    La par contre j'ai pas tout compris :
    1) je ne savais pas qu'on pouvait faire fonctionner un Try comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
    car si j'ai bien compris tu testes d'abord la connexion puis le reste du code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ResultSet rs=ps.executeQuery();//Correspond au RecordSet de VB
     
        if(rs.next()) {
            return rs.getString(1);
        }
    }
    catch (SQLException e) {
        System.out.println("Impossible de se connecter à la base");
        e.printStackTrace();
    }
    2)
    Ce code garantit que cn sera fermée, donc ps, donc rs, même en cas d'erreur (SQLException).
    C'est le fait de mettre :
    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
    qui te garantie que la connexion sera fermée même en cas d'erreur?

    3) Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
        		  }
    			  rs.close();
    Tu dis :
    Le tien non (aucune ressource n'est libérée).
    Il ne garantissait que les ressources de rs soient libérées lorsque tout se passait bien.
    Là OK
    maintenant qu'il y a un return dans le while (on sort de la fonction sans passer par l'appel de rs.close()).
    Non le Close est après la boucle While.

    Et pour finir
    Je ne sais pas. C'était dans ton code d'origine, je n'ai fait que copier/coller le tien.
    Vu sur l'aide JAVA pour le GETCatalog :" Retrieves this Connection object's current catalog name." là aussi on l'avais utilisé en formation pour SQLServer pour Access je l'ai enlevé ça fonctionne
    Merci et à +

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par xeron33 Voir le message

    2)

    C'est le fait de mettre :
    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    try (Connection cn=DriverManager.getConnection("jdbc:ucanaccess://d:/Access/BaseJAVA/JAVA.accdb;openExclusive=false;ignoreCase=true")) {
    qui te garantie que la connexion sera fermée même en cas d'erreur?
    Oui. Cette structure s'appelle un try-with-ressource.

    Elle fonctionne pour toute instance de classe qui implémente l'interface AutoCloseable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    try ( ici on met des créations d'instances de classe qui implémentent AutoCloseable) {
    }
    Lorsqu'on arrive à la fin du bloc du try-with-resources, toutes les instances AutoCloseable crées entre les paranthèses sont automatiquement fermées (leur méthode close est automatiquement appelée).

    Par exemple pour lire un fichier via un FileInputStream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try(FileInputStream fichier = new FileInputStream(file)) {
        // lecture du flux du fichier
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    S'il faut ouvrir plusieurs flux, il faudra mettre des ; à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try(FileInputStream entree = new FileInputStream(filein);
    FileOutputStream sortie = new FileOutputStream(fileout);) {
        // traitement de entree et sortie
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    Citation Envoyé par xeron33 Voir le message
    3) Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(rs.next()) {
    			    	System.out.println(rs.getString(1) + "\t");
    			        return (rs.getString(1)); 
        		  }
    			  rs.close();
    Tu dis :

    Là OK

    Non le Close est après la boucle While.
    Oui, mais ce n'est pas le problème. Il est surtout après un return (return (rs.getString(1));). Donc si ce return s'exécute, le rs.close() non. Le return arrête l'exécution de la méthode à l'endroit où il est. Tout le reste après n'est pas exécuté.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Récupérer les valeurs d'une méthode void
    Par whereistheshop dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 24/04/2017, 12h41
  2. Valeur renvoyé par une méthode et exceptions
    Par koktel_dfr dans le forum C#
    Réponses: 4
    Dernier message: 16/05/2008, 11h48
  3. [AJAX] Retour de valeur depuis le JS
    Par lodan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/10/2006, 08h13
  4. [SQL] Affichage d'une valeur depuis une requête
    Par kitty2006 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/09/2006, 16h38
  5. Passage valeure depuis un popup
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/12/2005, 13h08

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