1 pièce(s) jointe(s)
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:
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:
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:
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é
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
Citation:
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
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