Problème pilote Mysql-java BDD

Résolu/Fermé
Hits - Modifié le 13 août 2017 à 15:15
 Hits - 13 août 2017 à 15:58
Bonjour

étant étudiant en informatique, je m'entraine actuellement à une première approche des bases de données en java. Je veux utiliser mysql, j'ai déjà crée la base etc, j'essaie ensuite d'installer les pilotes et voilà qu'un problème intervient :

Je travail sans IDE, voilà ma seule class, dans le dossier qu'on va appeler "lib" :

public class Test {

public static void main ( String[] args ) {
Class.forName("com.mysql.jdbc.Driver");
}
}


j'ai mis le mysql-connector-java-5.1.43-bin.jar dans le meme dossier (lib) que la class Test , il n'y a que le .jar et Test.java dans ce dossier.

Jessaie donc de compiler, et là problème :
" Test.java:4: error: unreported exception ClassNotFoundException; must be caught or declared to be thrown
Class.forName("com.mysql.jdbc.Driver"); "

J'ai donc parcourus les forums publieurs heures, très peu de sujet sur comment faire sans IDE, j'ai quand même trouver qu'il fallait compiler avec javac -cp ou -classpath, j'ai trouver plusieurs syntaxe différentes, mais il y a toujours un problème et aucune ne marche, j'ai essayé par exemple :

javac -cp ~/Dropbox/Cours/IP2/Entrainement/Entjava/lib/mysql-connector-java-5.1.43-bin.jar Test.java

ou

javac -classpath ./mysql-connector-java-5.1.43-bin.jar; Test.java

et bien d'autres, le fait est que je ne comprend rien au classpath de manière général donc je ne suis pas aidé, mais mon soucis me parait très simple (surement problème de syntaxe) pourtant je n'y trouve aucune solutions,

merci de m'indiquer la démarche à suivre si possible
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié le 13 août 2017 à 15:35
Bonjour,

Le problème que tu as est plus simple que ça, il n'a rien à voir avec un problème de classpath ou de base de données (ce qui ne veut pas dire que tu n'en auras pas quand même plus tard) mais pour l'instant c'est juste de la gestion d'exception.

Dans ton cas :
Test.java:4: error: unreported exception ClassNotFoundException; must be caught or declared to be thrown Class.forName("com.mysql.jdbc.Driver");

La description de l'erreur est plutôt précise, mais je vais reformuler :
La méthode
Class.forName(String)
peut lever une exception de type
ClassNotFoundException
que tu es obligé de traiter, soit en l'attrapant avec un try/catch, soit en la propageant avec un throws.

Voir la documentation de Class.forName :
https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#forName-java.lang.String-

Donc il faut modifier ton code, au choix :

1) en attrapant l'exception avec un try/catch :

public class Test {

    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

2) en propageant l'exception avec un throws :

public class Test {

    public static void main(String[] args) throws ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
    }
}

Voir le cours Programmation Java/Exceptions
La confiance n'exclut pas le contrôle
0
merci de ta réponse !

j'avais déjà tester ça mais le problème ne ce ressoud pas, nouveau code :

public class Test {

public static void main ( String[] args ) {
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch (Exception e) {
e.printStackTrace();
}
}
}


ensuite je : javac Test.java && java Test

et la erreur suivante :

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at Test.main(Test.java:5)


peut etre dois-je compiler avec une autre commande ? mais je n'arrives pas a trouver
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié le 13 août 2017 à 15:51
"le problème ne ce ressoud pas"
En fait ce n'est pas le même problème, c'est juste le problème suivant... mais il fallait d'abord corriger les erreurs de compilations avant de passer aux erreurs d'exécution.

Maintenant avec le try/catch ton code compile, mais à l'exécution Class.forName plante car il ne trouve pas ton Driver, donc maintenant c'est effectivement un problème de classpath.

Dans ton message tu disais que tu faisais :
javac -classpath ./mysql-connector-java-5.1.43-bin.jar; Test.java 

Mais ça ne sert à rien de rajouter le connecteur à la compilation, ce qu'il faut c'est le rajouter à l'exécution, car c'est là que ton programme en a besoin :

Sous Windows :
javac Test.java
java -cp .;mysql-connector-java-5.1.43-bin.jar Test

Sous Linux :
javac Test.java
java -cp .:mysql-connector-java-5.1.43-bin.jar Test
0
Aha désolé je suis un peu perdu dans les classpath, merci de ton aide, nouvelle erreur suite à l'execution de la deuxieme commande :

long pavé :
Syntaxe : java [-options] class [args...]
(pour l'exécution d'une classe)
ou java [-options] -jar jarfile [args...]
(pour l'exécution d'un fichier JAR)
où les options comprennent :
-d32 utilisez le modèle de données 32 bits s'il est disponible
-d64 utilisez le modèle de données 64 bits s'il est disponible
-server pour sélectionner la machine virtuelle "server"
-zero pour sélectionner la machine virtuelle "zero"
-jamvm pour sélectionner la machine virtuelle "jamvm"
-dcevm pour sélectionner la machine virtuelle "dcevm"
La machine virtuelle par défaut est server,
car vous exécutez une machine de classe de serveur.


-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
Liste de répertoires, d'archives JAR et
d'archives ZIP séparés par des :, dans laquelle rechercher les fichiers de classe.
-D<name>=<value>
définition d'une propriété système
-verbose:[class|gc|jni]
activation de la sortie en mode verbose
-version impression de la version du produit et fin de l'opération
-version:<value>
Avertissement : cette fonctionnalité est en phase d'abandon et sera enlevée
dans une version future.
exécution de la version spécifiée obligatoire
-showversion impression de la version du produit et poursuite de l'opération
-jre-restrict-search | -no-jre-restrict-search
Avertissement : cette fonctionnalité est en phase d'abandon et sera enlevée
dans une version future.
inclusion/exclusion des environnements JRE privés de l'utilisateur dans la recherche de version
-? -help impression du message d'aide
-X impression de l'aide sur les options non standard
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
activation des assertions avec la granularité spécifiée
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
désactivation des assertions avec la granularité spécifiée
-esa | -enablesystemassertions
activation des assertions système
-dsa | -disablesystemassertions
désactivation des assertions système
-agentlib:<libname>[=<options>]
chargement de la bibliothèque d'agent natif <libname>, par exemple -agentlib:hprof
voir également, -agentlib:jdwp=help et -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
chargement de la bibliothèque d'agent natif via le chemin d'accès complet
-javaagent:<jarpath>[=<options>]
chargement de l'agent du langage de programmation Java, voir java.lang.instrument
-splash:<imagepath>
affichage de l'écran d'accueil avec l'image spécifiée
Voir https://www.oracle.com/java/technologies/javase-documentation.html pour plus de détails.

et derniere ligne du pavé :

"mysql-connector-java-5.1.43-bin.jar : commande introuvable"
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié le 13 août 2017 à 15:58
Relis mon commentaire précédent, j'y ai apporté une petite modification, car j'ai l'impression que tu es sous Linux où la construction du classpath n'est pas exactement la même que sous Windows.
0
ah non excuse moi c'est bon ça à l'air de marcher ! j'avais juste mit le ";" au lieux de ":" merci beaucoup pour ta présence sur le forum en tout cas, cela aide beaucoup, bonne journée

(et oui je suis sous ubuntu et je crois que sur ubuntu ";" = commande suivante donc c'est pour ça la nuance)
0