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 :

ResultSet vide malgré bonne connexion


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut ResultSet vide malgré bonne connexion
    bonjour,

    J'ai crée une classe Connexion_BDD qui permet de créer une instance de connexion à une base de données.

    J'ai crée dans la classe fenêtre_selection_clients la fonction Afficher_Client( pour l'instant elle est dans cette classe, mais je vais la déplacer dans la classe Client), qui permet d'afficher les clients qui sont de type "particuliers"(il existe également le type "entreprise").
    Le problème est que même si la connexion à la base de données s'effectue sans problème, il n'y a rien dans le resultset après execution de la requête.
    Je ne comprends pas pourquoiet aimerais vraiment comprendre ce qui se passe
    Je vous fais parvenir en fichier joint le détail du message d'erreur que je reçois.

    Je vous transmets également le code des classes Connexion_BDD, Client et fenetre_selection_client.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    package package_selection_clients;
     
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    //import java.util.*;
    import java.util.ArrayList;
     
     
     
     
    public class fenetre_selection_clients extends JFrame implements ActionListener{
    	//
    	ButtonGroup buttongroup_type_client; 
    	//
    	private JPanel panel_choix_client; 
    	//
    	private JPanel panBoutonAfficher ;
    	//
    	private JPanel panel_final; 
    	//
    	private JLabel LAB_choix_client ; 
    	//
    	private JRadioButton b1; 
    	//
    	private JRadioButton b2; 
    	//
    	private JButton boutonAfficher; 
    	//
    	private String type_client; 
    	//
    	private GridBagConstraints gbc ;  
    	//
    	 ArrayList listeClients;  
    	//declarationde la variable qui va contenir la requête de selection des clients particuliers 
    	private String requete_1; 
    	//declaration de la variable qui va contenir le resultat de la requête 
    	 ResultSet rs ; 
    	 // declaration de la variable de type Statement
    	 private  Statement stmt=null; 
     
    	public fenetre_selection_clients(){
     
    		this.setTitle("Choix de clients"); 
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    		//panel_final = new JPanel(new GridBagLayout()); 
     
    		panel_choix_client = new JPanel(new GridLayout(0,1)); 
     
    		LAB_choix_client = new JLabel("Veuillez choisir un type de client"); 
     
    		b1 = new JRadioButton("clients particuliers", false); 
    		panel_choix_client.add(b1); 
    		b1.setActionCommand("particuliers"); 
     
    		b2 = new JRadioButton("clients entreprises ", false); 
    		panel_choix_client.add(b2); 
    		b2.setActionCommand("entreprises"); 
    		buttongroup_type_client = new ButtonGroup(); 
    		buttongroup_type_client.add(b1); 
    		buttongroup_type_client.add(b2); 
     
     
     
     
    		panBoutonAfficher = new JPanel( new FlowLayout(FlowLayout.CENTER)); 
    		boutonAfficher = new JButton("AFFICHER"); 
    		boutonAfficher.addActionListener(this); 
    		panBoutonAfficher.add(boutonAfficher); 
     
    		this.getContentPane().add("Center",panel_choix_client); 
    		this.getContentPane().add("North",LAB_choix_client); 
    		this.getContentPane().add("South",panBoutonAfficher); 
     
     
     
    		pack();
    		this.setVisible(true); 
    	}// fin de constructeur 
     
     public void actionPerformed(ActionEvent e) {
     
    	 type_client = this.buttongroup_type_client.getSelection().getActionCommand(); 
    	 System.out.println("le type du client est "+type_client);
    	 Object source = e.getSource(); 
    	 System.out.println("le bouton sur lequel on clique est le bouton Afficher"+(source==boutonAfficher));
    		if(source == boutonAfficher){ 
    		Afficher_clients() ; 
     
    		}// fin de if (source==boutonAfficher)
     }// fin de actionPerformed
     
     public void Afficher_clients(){//throws SQLException{
     
     
    	listeClients = new ArrayList();
     
    	 try
     
    	  {
    	    requete_1 = "select ID_CLI, NOM_CLI, PRENOM_CLI, AD1_CLI, AD2_CLI, AD3_CLI from CLIENTS where TYPE_CLI = '"  +type_client+ "' ";
    	    System.out.println(requete_1);
    	    //String requete_2="select ID_CLI, RAISON_SOC, AD1_CLI, AD2_CLI, AD3_CLI from CLIENTS where TYPE_CLI = '"  +type_client+ "' ";
    	    Connexion_BDD conn = new Connexion_BDD(); 
    	   System.out.println("la connexion est " + conn); 
    	   conn.Connecter_BDD();
    	  System.out.println("la connexion est fermée"+conn.getConnexionSQL().isClosed());
     
    	  // L'exécution d'une requête SQL s'effectue via un objet de la classe java.sql.Statement .
    	   //C'est l'objet Connection qui nous fournira une référence d'objet Statement (à ne pas instancier directement ). Exemple : 
    		//   Statement stat = con.createStatement();  
    	   System.out.println(conn.getConnexionSQL()); 
    	   stmt = conn.getConnexionSQL().createStatement();
     
     
    	   rs = stmt.executeQuery(requete_1);
    	   int step = rs.getRow();
    	   System.out.println("le nombre de lignes du result set est "+step);
    	    System.out.println("il y a bien un autre resultat dans le resultset"+rs.next());
    	  //  System.out.println(rs.)
    	   while(rs.next())
    	    {
    	      listeClients.add(new Client(rs));
    	    }// fin de while
     
     
    	   for(int i=0; i<listeClients.size();i++){
     
    		   ((Client)listeClients.get(i)).lancerEnigme();
     
     
    	    }//fin de for     
     
    	  }// fin de try 
     
     
     
     
    	 catch(Exception e){
    			System.out.println("le message d'erreur est le suivant "+ e.toString());
    			System.out.println("voici une autre information"+e.getStackTrace());
    		}// fin de catch
     
    	 }//fin de AfficherClients
     
     }// fin de classe
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    package package_selection_clients;
    import java.util.*; 
    import java.sql.*;
     
    public class Connexion_BDD {
    	private String id_connexion;
    	// declaration de la variable ConnexionSQL qui va contenir l'adresse d' une instance de la classe Connection 
    	// pour l'instant elle est initiallisée à null
     
     
    	private Connection ConnexionSQL = null;
     
     
     
    	public Connexion_BDD(){}// constructeur par défaut 
     
    // création du getter qui va récuperer  l'adresse de l'instance de la classe Connection créée
     
    	public Connection getConnexionSQL(){
     
    		return ConnexionSQL;
    	}
     
     
     
    	public void Connecter_BDD(){
     
    		try {
    			//L'interaction à un système de gestion de base de données réquiert en général au moins quatre étapes :
    			// 1-Chargement du pilote
     
    		    //2-Etablissement de la connexion
     
    		   // 3-Exécution d'une requête
     
    		    //4-Exploitation des résultats 
    			System.out.println("chargement  drivers.......");
    			//1- chargement du pilote 
    			//On charge généralement le pilote par son nom; dans notre cas, il s'agit du driver driver odbc inclus dans le jdk 
    			//la variable driverOdbc possède le modificateur final , ce qui signifie que c'est une constante; on ne peut donc pas modifier sa valeur 
    			final String driverOdbc= "sun.jdbc.odbc.JdbcOdbcDriver"; // driver odbc inclus dans le jdk 
     
    			  // Autochargement du driver
    			Class.forName(driverOdbc).newInstance();
    			System.out.println("drivers chargés");
    			//Une fois le driver chargé en mémoire, nous pouvons obtenir une connexion via la méthode de classe getConnection() 
    			//de la classe DriverManager 
    			//L'instruction de création d'une connexion à la BDD est de la forme 
    			 //Connection con = DriverManager.getConnection(URL, "user", "passwd");
    			 // URL : url de connexion de la forme jdbc:sous-protocole:sous-nom
    			 // sous-protocole:identification du pilote: dans notre cas le nom du pilote(driver) est "odbc" 
    			 // sous-nom  :  informations nécessaires au pilote pour la connexion (chemin, port, nom) 
    			 // "passwd" : Mot de passe 
    			 // "user"   : Nom de l'utilisateur référencé par la base 
     
    			//on constate pour l'instant qu'il n'y a pas de mot de passe , ni de nom d'utilisateur précisé , dans la chaine de connexion
    			ConnexionSQL = DriverManager.getConnection("jdbc:odbc:bdd_clients_1","","");
    			System.out.println("connection établie:" + ConnexionSQL);
     
     
    		}//fin de try
     
    		catch(Exception sqle){
    			System.out.println("la connexion n a pas pu être établie"+ sqle.getMessage());
     
    		}// fin de catch
     
    	}// fin de fonction Connecter_BDD
    //	---------------------------	
     
    }// fin de classe Connexion_BDD
    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
     
    package package_selection_clients;
    import java.sql.*;
    import java.util.ArrayList;
    import java.awt.*;
    import javax.swing.JOptionPane;
    import javax.swing.JTextPane;
     
    public class Client {
     
    	private JTextPane jTextPane1;
    	private String texte;   
    	public String id_client; 
    	public String nom_client;
    	public String prenom_client;
    	public String adresse_1_client;
    	public String adresse_2_client;
    	public String adresse_3_client;
    	public String type_client;
     
     
    	public Client(ResultSet res_set)throws SQLException{
    		id_client=res_set.getString(1); 
    		nom_client=res_set.getString(2);
    		prenom_client=res_set.getString(3);
    		adresse_1_client=res_set.getString(4);
    		adresse_2_client=res_set.getString(5);
    		adresse_3_client=res_set.getString(6);
    		type_client=res_set.getString(7) ;
     
    		texte = id_client + nom_client + prenom_client + adresse_1_client + adresse_2_client + adresse_3_client + type_client ; 
    	}// fin de constructeur de la classe Client
     
     
     
    	public void lancerEnigme(){
     
    		//On crée le textfield qui contiendra le texte de l'énigme
    	    jTextPane1 = new JTextPane();
    	    jTextPane1.setText(texte);
    	    jTextPane1.setPreferredSize(new Dimension(400, 200));
     
     
    	}// fin de lancer enigme
     
     
    }// fin de classe
    Merci beaucoup de m'aider à voir clair et à résoudre cette difficulté
    Fichiers attachés Fichiers attachés
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonsoir,

    Index de descripteur non valide signifie que tu essayes d’accéder à une valeur qui n'existe pas, donc si tu as bien 7 champs dans ta base, il me semble que le getString() commence à 0.

    Il peut y avoir une erreur ici aussi sans le while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public Client(ResultSet res_set)throws SQLException{
    while (res_set.next()){
    		id_client=res_set.getString(1); 
    		nom_client=res_set.getString(2);
    		prenom_client=res_set.getString(3);
    		adresse_1_client=res_set.getString(4);
    		adresse_2_client=res_set.getString(5);
    		adresse_3_client=res_set.getString(6);
    		type_client=res_set.getString(7) ;
     }
    	}// fin de constructeur de la classe Client
    Remarque : prend le comme un conseil mais la ton code c'est un peu un plat spaghetti. Il existe différent modèle pour organiser le code ( arche, seeheim ,6 couches , MVC). Pour ma part le MVC me convient bien donc tu peux faire des classes à part pour tes actions Listener, contrôleurBouton extends ActionListener par exemple.

    Et dans ta classe sql met toutes tes méthodes pour manipuler les bases de données ( fermerConnexion(), OuvrirConnexion(), ExecuterRequete(String req)).

    Ton code sera tout de suite plus léger et facile à maintenir.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut problème de connexion à la BDD
    Bonjour,

    Merci pour ta réponse.
    Il est vrai que je n'ai pas assez réfléchi à la modélisation avant de créer mes classes.
    qu'appeles-tu MVC: est-ce un logiciel de modelisation?

    Voici un nouveau message que je reçois


    le type du client est particuliers
    le bouton sur lequel on clique est le bouton Affichertrue
    chargement drivers.......
    drivers chargés
    connection établie:sun.jdbc.odbc.JdbcOdbcConnection@15f157b
    la connexion n a pas pu être établie[Microsoft][Pilote ODBC Microsoft Access]Utilisation non valide de pointeur null
    que penses-tu de ce message?
    S'agit-il d'un problème par rapport au chemin de la base de données, un mauvais driver?

    Merci encore beaucoup de votre aide sur ce point.

    Cordialement.
    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  4. #4
    Membre actif Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Points : 245
    Points
    245
    Par défaut
    7 eme colonne n'existe pas dans ta select.
    dans la méthode Client enlever "type_client=res_set.getString(7) ;" ca doit marcher

  5. #5
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Si sa fonctionne je n'ai plus rien à dire .

    Pour ce qui est de MVC => Modèle vue contrôleur. Ce n'est pas un logiciel mais une méthode de d’organisation de ton code.

    le but est de séparé ta vue (Jbutton,JFrame etc..) du contrôleur( le lien entre le modèle et la vue, donc souvent les listeners) enfin du modèle ( tes fonctions de calcul modification requête).

    Donc dans ta classe ou il y a les JFrame JButton tu ne dois pas avoir de class implement listener ni de méthode ou tu te connectes à la base ou une requête ou un calcul. La classe VueUtilisateur c'est juste du swing, la classe contrôleurBouton c'est une implémentation de actionListener et enfin la classe Modèle c'est la que ce trouve toutes tes fonctions. Le but est de pouvoir rendre réutilisable ton modèle sur plusieurs vue par exemple.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut méthode MVC -organisation de code
    Bonjour,

    N'est-il pas suffisant d'organiser son code selon le contenu des diagrammes de classes de la méthodologie UML.
    C'est ce que je compte faire , j'ai donc besoin de savoir si la méthode MVC s'appuie sur la méthodologie UML ou pas.
    Cette méthode MVC est-elle en contradiction avec la méthodologie UML ou pas.

    Te remerciant de ta réponse.
    Sinon, j'ai un meilleur résultat à l'affichage ( il s'agissait bien d'un champ oublié dans la requête SELECT)mais la méthodoe lancerEnigme n'est pas appelée, ce qui reste irrésolu pour le moment.

    Cordialement.
    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  7. #7
    Membre actif Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Points : 245
    Points
    245
    Par défaut
    il faut pas inventer les notions on dit pas méthode MVC mais patterne MVC:

    ICI

    ICI

  8. #8
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Le modèle "modèle-vue-contrôleur" (MVC) est juste un modèle d'architecturer son code. Il permet, quand il est bien compris, utile et justifié, de pouvoir rapidement se retrouver et de pouvoir facilement opérer des changements qui auront normalement des impacts minimes.
    Tu peux aussi utiliser ce type de pattern en UML sans aucun problème (c'est l'une des raisons de bases, en fait).

    Au risque de me faire taper dessus, je te conseils plutôt de "organiser le code de manière logique en séparant UI, traitements et métiers".
    Je ne suis encore que simple étudiant, mais je n'ai pas encore vu un seul MVC qui facilitait clairement la vie pour le moment (la moitié complexifiant inutilement, l'autre moitié voulant suivre ce méta-pattern et se vautrant lamentablement).
    J'ai plutôt l'impression qu'il faut soit appliquer bêtement le principe sans vraiment le comprendre, soit avoir de la bouteille pour correctement le mettre en œuvre.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

Discussions similaires

  1. Liste de champs vide malgré un filtre correct
    Par icare_1er dans le forum Modélisation
    Réponses: 2
    Dernier message: 05/07/2007, 20h44
  2. JDBC - ResultSet vide - Requete bonne
    Par Rouxxx dans le forum JDBC
    Réponses: 8
    Dernier message: 02/07/2006, 12h25
  3. probleme de resultset vide
    Par bredsac dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/06/2006, 03h00
  4. SQLServer - JDBC - Resultset vide - Requete bonne
    Par Rouxxx dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/05/2006, 19h51
  5. [JDBC] ResultSet Vide avec Oracle9 et WebSphere5
    Par mcrbe dans le forum Websphere
    Réponses: 5
    Dernier message: 24/04/2006, 12h17

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