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

JDBC Java Discussion :

Erreur "ClassNotFoundException" sur com.mysql.jdbc.Driver malgré bon paramétrage


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut Erreur "ClassNotFoundException" sur com.mysql.jdbc.Driver malgré bon paramétrage
    salut tout le monde.

    bon le titre est assez explicite, à savoir que :

    mon connecteur (fichier .jar) est sur le disque, à un chemin qu'on va appeler "chemJar" (pour simplifier les choses).

    ce chemin est déclaré au complet avec le nom du fichier jar dans le classpath.

    dans mon code que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void OuvrirMysqlConnexion()
    	{
    		try
    		{
    			Class.forName("com.mysql.jdbc.Driver").newInstance();
    			connexion = DriverManager.getConnection("jdbc:mysql://" + szServ + "/" + szBdd + "?user=" + szUser + "&password='" + szPwd + "'");
    		}
    		catch (Exception exp)
    		{
    			System.out.println("echec DataBase.OuvrirMysqlConnexion : " + exp.getMessage());
    		}
    	}
    j'ai l'anomalie suivante :

    echec DataBase.OuvrirMysqlConnexion : com.mysql.jdbc.Driver
    erreur : java.lang.NullPointerException
    quel est mon souci ? j'arrive pas à l'identifier.

    merci pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    C'est très clairement un problème de classpath.

    Fais-voir ta ligne de commande pour exécuter ton code

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Par défaut
    Bonjour,

    Pour commencer, je ne comprends pas très bien ta connexion à ta base de données avec ton instruction :
    connexion = DriverManager.getConnection("jdbc:mysql://" + szServ + "/" + szBdd + "?user=" + szUser + "&password='" + szPwd + "'");
    Si mes souvenirs sont exacts, getConnection prends trois paramètres que sont l'url jdbc pour atteindre ta BD, le user et le password de ton SGBD. i.e
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexion = DriverManager.getConnection("jdbc:mysql://" + szServ + "/" + szBdd,  szUser,  szPwd) ;
    Pour l'erreur que t'as, je me demandais si t'as chargé le jar jdbc de ta BD via éclipse ou netbeans suivant ce que t’utilise.

    Avec éclipse c'est à peu près: clique droit sur ton projet, puis properties-->Java Build path-->Libraries-->Add jar, et là t'indique le chemin chemjar où se trouve ce jar là pour qu'il puisse être intégré dans le classpath.

    Cordialement.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    merci pour vos réponses.

    je vous donne ma commande d'exécution de tete car, n'ayant pas acces au poste où j'ai fais ca à cette heure ci, je corrigerai demain si je me trompe.

    alors mon fichier main étant dans un répertoire que j'ai appelé "Resto", constituant un package qui se trouve dans le répertoire courant, voici ma commande :

    java -cp . Resto.main

    pour ma méthode de connexion mister_kool, je peux en effet me tromper. c'est la 1ere fois que je fais ca, je débute un peu en java, donc en phase de découverte. mais j'ai trouvé ce que j'ai fais sur un site ou un forum du coup je l'ai mis en place.

    en revanche, pour l'instant je n'utilise aucun IDE, pour l'instant le fais mes classes avec Notepad++ et compile et exécute en ligne de commande. ca me permet de mieux comprendre le fonctionnement et de mieux maitriser tout ca avant de passer aux IDE;

    merci à vous

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    je confirme que ma commande d'exécution donnée ci dessus est la commande exécutée qui me génère mon anomalie.

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Alors tu devrais avoir quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp ./path/to/mysql-connector-j.jar resto.Main
    si dans ton main tu as une déclaration

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    j'ai effectivement la déclaration du package dans mon main, conformément au nom du répertoire "Resto".

    en revanche lorsque j'exécute le :

    java -cp CheminCompletDuConnecteurMysql.jar Resto.Main

    => impossible de trouver ou charger la classe principale Resto.Main

    pour info, ma classe s'appelle bien "Main" avec la methode static "main" dans un fichier "Main.java", mon package est bien Resto (non resto), et cette derniere ligne de commande a été exécutée en étant situé dans le répertoire où se trouve le Resto.

    Merci de votre retour.

  8. #8
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par splinternabs Voir le message
    en revanche lorsque j'exécute le :

    java -cp CheminCompletDuConnecteurMysql.jar Resto.Main

    => impossible de trouver ou charger la classe principale Resto.Main
    il n'y a pas d'espaces dans le chemin en question? de symboles bizarres?


    Citation Envoyé par splinternabs Voir le message
    mon package est bien Resto (non resto)
    ça ne suit pas vraiment les conventions de nommage habituelle

    Citation Envoyé par splinternabs Voir le message
    , et cette derniere ligne de commande a été exécutée en étant situé dans le répertoire où se trouve le Resto.
    donc, dans ./Resto/, on trouve bien le fichier "Main.class" (fichier compilé)?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    il n'y a pas d'espaces dans le chemin en question? de symboles bizarres?
    C:\perso\dev\mysql-connector-java-5.1.17\mysql-connector-java-5.1.17-bin.jar

    ce chemin est-il bizarre ?

    donc, dans ./Resto/, on trouve bien le fichier "Main.class" (fichier compilé)?
    ... bin/Resto/Main.class

    et quand j'exécute ma commande je suis dans le bin.

    par contre pour les conventions de nommage ... lol

  10. #10
    Membre émérite

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Par défaut
    Salut,

    Je pense que t'as un problème dans ta commande java -cp ... . Je pense que la commande est : java -cp [<<chemin d'une classe à utiliser>>] <<chemin du fichier java contenant la méthode main à exécuter>>.

    Alors lorsque tu fais Resto.Main en ligne de commande, Java n'arrive pas à comprendre où est véritablement ta classe Main, parce que pour lui en ligne de commande Resto.Main n'est pas une url.

    Je te propose donc que dans ton invite de commande :

    1) soit tu te positionne complètement dans le répertoire Resto et tu lance les commandes : javac Main.java et java Main.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\mesProgrammesJava\monProjet\Resto> javac -classpath "cheminDeTonJarJDBC" Main.java
    (il s'agit là de la compilation pour créer la classe Main.class)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\mesProgrammesJava\monProjet\Resto> java -classpath "cheminDeTonJarJDBC" Main
    (il s'agit là de l'exécution)

    2) soit tu fais : exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\> javac -classpath "cheminDeTonJarJDBC" c:\mesProgrammesJava\monProjet\Resto.Main.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\> java -classpath "cheminDeTonJarJDBC" c:\mesProgrammesJava\monProjet\Resto.Main

    Cordialement.

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pill_s t'as donné une mauvais commande, enfin elle était presque bonne.

    Quand tu met un classpath explicite (comme dans ton cas) le "répertoire courant" par défaut n'en fait pas partie. donc il ne cherche ton main que dans le .jar.

    La commande correcte devrais être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp .;C:\perso\dev\mysql-connector-java-5.1.17\mysql-connector-java-5.1.17-bin.jar Resto.Main

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    cette commande marche tchize_, c'est nikel !!!

    j'ai aussi modifié l'appel au getConnetion() en y passant 3 parametres comme le suggerait misterKool

    par contre, la classe Main était bien trouvée parce que l'application est un peu plus complexe que ca, le main fait appel à un objet par instanciation puis appel à une methode de ce dernier, elle meme qui instancie et appel la methode d'un autre objet etc ... jusqu'a atteindre l'appel de la methode qui ouvre la connexion, celle qui provoque cette anomalie.

    Pour avoir une anomalie dans cet appel du code, il faut que les différentes instanciations et appels soient réalisés.

    c'est de la bombe merci a vous les gars.

  13. #13
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Quand tu met un classpath explicite (comme dans ton cas) le "répertoire courant" par défaut n'en fait pas partie. donc il ne cherche ton main que dans le .jar.
    un gros LOL

    voilà une des raisons qui font qu'eclipse c'est mieux que la cli...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/01/2013, 13h48
  2. Réponses: 23
    Dernier message: 11/04/2012, 17h00
  3. Réponses: 1
    Dernier message: 16/04/2010, 03h05
  4. Réponses: 6
    Dernier message: 17/04/2009, 16h53

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