Problème de Pilote Base de Données

Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007 - 2 nov. 2006 à 22:29
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Derniè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é

Si quelqu'un peut m'aider?
Merci d'Avance
Maiku

12 réponses

lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
3 nov. 2006 à 14:42
est ce que tu as créer ton lien ODBC?



lafolle
0
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
3 nov. 2006 à 14:43
et sinon avec plus de précision tu travailles avec quoi comme BD?


lafolle
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
3 nov. 2006 à 22:56
Salut

Dsl j'ai pas vu que j'avais oublié de mettre le code correspondant , le voila :

import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

 try
         {
              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));
          }
        catch(Exception e)
        {
             //on cherche un objet de type Frame contenant l'applet
            Frame fr=null;
            Component parentCourant=this;
            while (parentCourant!=null && fr==null)
            {
          
                if (parentCourant instanceof Frame) fr=(Frame)parentCourant;
                else parentCourant=parentCourant.getParent();
            }
            MsgBox.affMsg(fr, e.toString());
         }

Il s'agit d'une base de données Acces.
Merci d'Avance
Maiku
0
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Derniè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
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Derniè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 :

 // Les Attributs


         private String NomUrl="jdbc:odbc:";
         private Connection con = null;
         private ResultSet Resultat = null;

         public Statement ExecuterConnection()
         {
             Statement Objet=null;
           
             try
             {
                 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                 con = DriverManager.getConnection(NomUrl,"","");
                 Objet = con.createStatement();
                
             }
             catch(Exception e)
             {
               System.out.println(e.getMessage());
             }
             return Objet;
            
            
         }
         public ResultSet ExecuterRequeteSelect(String Requete,Statement Objet)
       { try
             {
                 Resultat = Objet.executeQuery(Requete);
                
             }
             catch(SQLException e)
             {
                 System.out.println(e.getNextException());
             }
             return Resultat;
           }

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

Maiku
0
cs_Vitty Messages postés 4 Date d'inscription mercredi 8 novembre 2006 Statut Membre Derniè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é.

En espérant que ca puisse t'aider ;)
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Derniè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

Maiku
0
cs_Vitty Messages postés 4 Date d'inscription mercredi 8 novembre 2006 Statut Membre Derniè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.

Ou sinon :
Créer statement 1
requête 1
Fermer statement 1
Créer statement 2
requête 2
Fermer statement 2

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()"
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Derniè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 ?

Maiku
0
cs_Vitty Messages postés 4 Date d'inscription mercredi 8 novembre 2006 Statut Membre Derniè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.
0
Maiku Messages postés 190 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 4 juillet 2007
10 nov. 2006 à 12:05
Salut

A propos du code :

Objet = u1.ExecuterConnection();
              Resultat = u1.ExecuterRequeteSelect("Select NomAdr,Mdp From Adresse", Objet);
               while(Resultat.next())
               {
                this.Adr.addItem(Resultat.getString("NomAdr"));
                                  
               }

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.

J'espère que vous pourrez m'aider.
Merci d'Avance
0
Rejoignez-nous