Récupération d'une données dans un jTextField en fonction de la sélection dans u

Signaler
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008
-
 wasy -
Bonjour,

comment puis je envoyer le résultat d'une requête dans un jTextField tout en sachant que ce résultat sera dépendant de la sélection qui aura été faite dans une combo box avant.*
En fait j'ai une combo box dans laquelle je récupère une liste de pays, et lorsque je sélectionne FRANCE dans la liste par exemple, je voudrait que paris apparaissent automatiquement dans le champs de texte capitale qui suit.
Les informations se trouve dans une base de données sql server.

Merci d'avance.

JULIEN.

20 réponses

Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
17
désolé pokitos
, j'aurais dû raffraishir

petite correction : itemStateChanged(ItemEvent e)

+1 pour le ActionListner au lieu du ItemListener : le ItemListener nécessite un test du genre :
if(e.getStateChange() == 1) // ItemEvent e
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

Je pars sur le principe que tu sais faire la requete;

tu recupere ton ResultSet res (pour jdbc);

et tu fais jtextfield.setText(res.getString(1));

Tu implemente ça soit dans un bouton que tu as créé, soit dans un actionlistener du combobox

///
jComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox.ActionPerformed(evt);
            }
        });

private void xpActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
envoie de la requete ;
jtextfield.setText(res.getString(1));
}
catch(Exception e){
}
}
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
17
Salut,

voici la réponse en gros titres, et nous pourrons par la suite développer chaque étape :

1. Développer une méthode capitaleFromPays() :

cette méthode :

    a) se connecte à la base.
    b) exécute une requête SELECT  du genre :
          select capitale from pays where nomPays = '" + tonCombo.getSelectedItem().toString() + "'";

    c) récupère le résultat de la requête et ferme tout flux ouvert (ResultSet, Connexion avec la base..).

2. Ajout d'un ItemChangeListener à l'objet JComboBox en question : la méthode itemStateChange(ItemEvent e) initialise l'objet JTextField du résultat obtenu par la méthode capitaleFromPays().

Cordialement..
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
17
pour ne pas effectuer l'action deux fois !
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Re à tous les deux,

tout d'abord merci pour votre aide mais je n'y arrive toujours pas voici ce que j'ai créé grâce à vos explications:

package testaccesdonnees;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main extends javax.swing.JFrame {
   
   //déclaration des variables de départ
    static Connection con = null;
    static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    static Statement stm2 = null;
    static ResultSet rs2 = null;
    static Statement stm3 = null;
    static ResultSet rs3 = null;
   
   
    public Main() {
       
        initComponents();
    }

    private void etatConnexionActionPerformed(java.awt.event.ActionEvent evt) {                                             

}                                            

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
             
                //fermeture connection
                 if(con !=null)
                {
                    try{
                        con.close();
                        etatConnexion.setText("Système non connecté à SQL Server");
                    }catch(SQLException e){
                        etatConnexion.setText("Problème de déconnexion");
                    }
                }
                this.dispose();
    }                                       

    private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {

    }

    private void jComboBox2ItemStateChanged(java.awt.event.ItemEvent evt) {
    
       //mise en place requête de récupération de l'adresse liée au site
        try
        {            String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem().toString() + "'";
            stm3 = con.createStatement();
            rs3 = stm3.executeQuery(SQL3);
            jTextField1.setText(rs3.getString("adresse"));
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }
   

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new Main().setVisible(true);
               
                try
                {
                     Class.forName(driver);
                     String connectionUrl = "jdbc:sqlserver:*************;" +
                     "databaseName=ansamble;user=**;password=**;";
                     con = DriverManager.getConnection(connectionUrl);
                     etatConnexion.setText("Système connecté à SQL Server");
                     String SQL2 = "SELECT * FROM site";
                     stm2 = con.createStatement();
                     rs2 = stm2.executeQuery(SQL2);

                     while (rs2.next())
                     {
                        jComboBox2.addItem(rs2.getString("intitulex3"));
                     }
                 }
                 catch (ClassNotFoundException ex) {
                      System.out.println(ex);
                 }       
                 catch (SQLException e) {
                       etatConnexion.setText("Probleme de connection "+ e.toString());
                 }      
          }
        });
    }

Lorsque je fais ceci ou si je place la requête dans l'ActionPerformed à la place du ItemStateChanged sa ne fonctionne pas et sa me renvoi comme erreur :

          com.microsoft.sqlserver.jdbc.SQLServerException: Le jeu de résultat n'a pas de ligne actuelle.

Pourtant ma requête fonctionne dans sqlserver, ma connection à la base fonctionne et ma jComboBox2 récupère bien la liste des valeurs de la requête 2.

Si vous pouvez me dire ce qui ne vas pas svp????

Merci d'avance^^.

Julien.
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
17
Salut,

désolé de ne pas pouvoir lire ton code (j'ai pas le temps : entrain de travailler), mais j'ai voulu te dire qu'il faut éviter les static tant que ce n'est pas nécessaire..

autre chose, je te conseille d'encapsuler ta connexion à ta base dans une classe : c'est plus élégant et plus orienté objet..
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

rajoute avant le while , rs2.beforefirst(); (ou first ou First je me rapelle plus.)
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

parcontre si tu sais que n'as qu'un resultat, vire le while et tu fais:

rs2.first();
r2.getString("intitulex3");
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

c'est rs2.beforeFirst();

en fait le probleme vient que dans le while tu demandes le suivant des le debut mais si tu n'as qu'un résultat(une ligne) il ne peux pas entrer dans la boucle.

donc d'ou ma seconde solution, si tu sais que tu n'as qu'une ligne en resultat
tu leve le while et tu fais

rs2.first(); puis getString()

J'espere que c'est plus clair comme ça.
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Re,

ba en fait le while est necessaire car il va chercher l'ensemble des résultat pour construire la liste de la comboBox. Lorsque je lui met beforeFirst il m'envoi une erreur.
En fait le problème ne vient pas de ma requête rs2 puisqu'elle a pour rôle de remplir la comboBox et elle le fait.
Le problème c'est rs3 qui ne me renvoi pas l'adresse associé a lintitulé selectionné dans la comboBox je me demande si mon actionPerformed fonctionne?????
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Est ce que c'est bien dans le  private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {...}que je dois mettre ma requête
        String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem().toString() + "'";
        stm3 = con.createStatement();
        rs3 = stm3.executeQuery(SQL3);
         jTextField1.setText(rs3.getString("adresse"));

parce que çà fonctionne tant que je n'ai rien sélectionné dans ma liste et lorsque je selectionne un champs dans la liste il me renvoi une erreur en me donnant

        2 juin 2008 20:24:31 testaccesdonnees.Main jComboBox2ActionPerformed
        GRAVE: null
        com.microsoft.sqlserver.jdbc.SQLServerException: Le jeu de résultat n'a pas de ligne actuelle

donc je n'y arrive pas je ne comprend pas arf^^

Merci a tous les deux de m'aider a me dépatouiller.
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

stm3 = con.createStatement();
 rs3 = stm3.executeQuery(SQL3);

rs3.first();

 jTextField1.setText(rs3.getString("adresse"));

Je me suis trompé c'est sur celui là que tu doit mettre le 'first'.
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

je lui passe first avant et maintenant il me renvoi

    2 juin 2008 23:12:12 testaccesdonnees.Main jComboBox2ActionPerformed
    GRAVE: null
    com.microsoft.sqlserver.jdbc.SQLServerException: L'opération demandée n'est pas prise en charge pour les jeux de résultats avant uniquement.

c trop chelou....
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

Par curiosite tu peux faire un print de ta requete?

Sinon tu ecrit les script avec quoi? editeur basic ou eclipse / netbean
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Re,

je travail sur netbeans avec awt/swing pour la partie graphique

et voila ma requête:
        String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem().toString() + "'";
        stm3 = con.createStatement();
        rs3 = stm3.executeQuery(SQL3);
         jTextField1.setText(rs3.getString("adresse"));

dans cette requête je selectionne adresse à partir de la table site ou intitulex3 correspond à l'item que je selectionne dans ma jComboBox2
Normalement elle devrais me renvoyer l'adresse correspndante à l'intitulé sélectionné.
J'ai essayé avec rs3.First, rs3.beforeFirst et il me renvoi des erreurs. Pourtant comme sa sa à l'air bon donc......
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

Je voulais dire System.out.println(SQL3);

Pour etre sur que t'envoie la bonne requete.
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Voila ce que j'ai dans mon ActionPerformed jComboBox2:

        try
        {
                      String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem() + "'";
            stm3 = con.createStatement();
            rs3 = stm3.executeQuery(SQL3);
           
            System.out.println(SQL3);

        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

voila ce que m'envoi la requête quand elle s'execute avec le System.out.println():

SELECT adresse FROM site WHERE intitulex3 = 'VILLEFRANCHE SUR CHER RS'

et voila ce quelle me renvoi avec le jTextField1.setText(rs3.getString("adresse"));

3 juin 2008 12:43:14 testaccesdonnees.Main jComboBox2ActionPerformed
GRAVE: null
com.microsoft.sqlserver.jdbc.SQLServerException: Le jeu de résultat n'a pas de ligne actuelle.
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(Unknown Source)

Si tu veux tu me met ton adresse mail et je t'envoi le zip de mon appli pour que tu test si tu as netbeans. C'est comme tu veux je revient a 14Heure

Merci en tous cas de m'aider parceque la je galere.

Julien.
Messages postés
21
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
27 juillet 2008

ok envoie moi ton zip.
je suis pas un pro mais comme , je suis en plein dedans depuis 3 mois, j'en ai vu passer des erreurs qui paraissent apres tres stupide.

envoie sur:    serialjp@hotmail.fr
Messages postés
119
Date d'inscription
mardi 8 avril 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Re,

c'est bon je te l'ai envoyé...

Merci.