Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007
-
2 nov. 2006 à 22:29
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007
-
10 nov. 2006 à 12:05
Salut
Je débute en java, et j'essaye de travailler avec une base de données pour un projet, mais je me heurte à l'erreur suivante :
- Lorsque je compile le programme :
[Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié
[Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié
- Lorsque j'affiche un MsgBox avec l'erreur
java.lang.NullPointerException
Mon Code est le suivante :
[Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié
[Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié
lafolle24320
Messages postés406Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention29 juin 20097 5 nov. 2006 à 17:02
Bonjour,
oui çà ok. Mais il faut que tu crée ton lien ODBC avec le panneau de config /outils d'administration/Sources de données.
En fait le lien ODBC va permettre de transcrire tes requêtes/
bonne prog
lafolle
Vous n’avez pas trouvé la réponse que vous recherchez ?
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 5 nov. 2006 à 17:18
Salut
Ben je l'ai fait pourtant.
Comme c'est la première fois que je faisais du java, en plus avec une base de données, j'avais vu un tutorial assez simple qui en parlait.
Cette étape y figurait, peut etre y a t il un problème dans le nom que j'ai mis alors .
Je regarderais ça et te tiendrais au courant si j'ai le net à mon appart, sinon je te dirais si c'est resolu mardi soir.
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 7 nov. 2006 à 23:34
Salut
Problème Résolu. Tu avais raison un problème dans le nom que j'avais précisé dans la souce Odbc.
Maintenant j'ai un autre problème : après ma première requete, je dois en executer une seconde, donc j'ai compris qu'il fallait fermer le resultSet pour executer une nouvelle requete, pourtant une erreur sql survient tjrs et me dit que le ResultSet est fermé, alors que j'utilise une nouvelle requete.
Je te met mon code :
try
{
//On se connecte à la base de données
Objet = u1.ExecuterConnection();
Resultat = u1.ExecuterRequeteSelect("Select NomAdr From Adresse", Objet);
while(Resultat.next())
{
this.Adr.addItem(Resultat.getString("NomAdr"));
}
Resultat.close();
Resultat = u1.ExecuterRequeteSelect("Select Mdp From Adresse where NomAdr="+this.Adr.toString(), Objet);
while(Resultat.next())
{
this.Mdp.setText(Resultat.getString("Mdp"));
}
Resultat.close();
}
catch(Exception e)
{
MsgBox.affMsg(fr, e.toString());
}
U1 correspond à un Objet de Type Base de données, une bibliothèque de classe que j'ai importé dans le Projet, voici le code des deux méthodes que j'utilise ainsi que ses attributs :
Si dans le code du projet, la connexion et l'oBjet Statement sont pas fermés, c'est parce qu'ils seront fermé lorsque l'utilisateur quittera l'application.
Merci de ton aide d'avance
cs_Vitty
Messages postés4Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention 9 novembre 2006 8 nov. 2006 à 10:36
Bonjour,
Ton problème vient de ton premier resultSet.close(). Tu ne peux ouvrir qu'un seul resultSet sur un même statement.
Tu devrais plutôt utiliser un statement par requête à exécuter : tu crées le statement, tu exécutes ta requête, tu traites le résultat de ta requête, et tu fermes ton statement.
Remarques :
- la fermeture de ton statement ferme implicitement ton resultSet,
- si tu ne fermes pas tes statements, tu risques d'avoir une erreur du type "nombre maximal de curseur atteint". A chaque ouverture de statement, tu ouvres un curseur sur la base. Le nombre total de curseur pouvant être ouvert est limité.
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 8 nov. 2006 à 12:08
Salut
Ben pourtant j'avais vu qu'on pouvait utiliser un ResultSet pour plusieurs requetes.
Si on doit récréer un Objet Statement à chaque fois, ca veut dire qu'on refait la connexion à la Base de Donnees non ?
On peut pas utiliser le même ResultSet pour toutes les Requetes donc ?
Merci d'Avance
cs_Vitty
Messages postés4Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention 9 novembre 2006 8 nov. 2006 à 13:17
Tu peux très bien utiliser un seul statement pour plusieurs requêtes :
Créer statement
requête 1
requête 2
Fermer statement
Mais dans ce cas, il ne faut pas fermer le ResultSet.
Si je reprends ton code :
con = DriverManager.getConnection(NomUrl,"",""); // création de la connexion
Objet = con.createStatement(); // création du statement
A chaque fois que tu crées un statement, tu n'es bien entendu pas obligé de recréer la connexion, mais pour ce faire, tu dois revoir ta méthode "public Statement ExecuterConnection()"
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 8 nov. 2006 à 13:37
Salut
Auparavant le ResultSet.Close() je ne l'avais pas mis pourtant mon message me disait toujours que le ResultSet était fermé, comment c'est possible vu que après la première requete je ne le fermais pas ?
cs_Vitty
Messages postés4Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention 9 novembre 2006 9 nov. 2006 à 17:01
Sans le code que tu appelles "auparavant", je ne peux pas te dire quel était le problème ;)
Cependant, si je regarde le code que tu as fourni précédemment :
Objet = u1.ExecuterConnection();
Resultat = u1.ExecuterRequeteSelect("Select NomAdr,Mdp From Adresse", Objet);
while(Resultat.next())
{
this.Adr.addItem(Resultat.getString("NomAdr"));
}
this.Mdp.setText(Resultat.getString(2));
Il y a une erreur dans ce code : tu ne peux pas faire de "Resultat.getString(2)" si "Resultat.next()" a renvoyé false.
Cette Requete s'execute correctement et je recupere bien les resultats dans la combobox.
Le Problème vient de la seconde requete.
Après la première requete, je ne ferme pas le ResultSet pour pouvoir me reutiliser
Le code de la seconde requete est :
Resultat =u1.ExecuterRequeteSelect("Select Mdp From Adresse where NomAdr='"+this.Mdp.toString()+"'",Objet);
Le problème n°1 : J'effectue ce bout de code dans un try catch , dans le catch, j'ai une methode qui m'affiche Un MessageBox dans lequel, On m'indique que le ResultSet est fermé, hors le ResultSet je l'ai pas fermé.
Problème n°2 : j'arrive pas à récuperer la valeur du TextBox de Mdp donc forcement la requete ne fonctionne pas, le toString() m'affiche je sais pas combien de ligne de code.