2010-11-11 6 views
0

J'ai installé Mysql sur ma machine Linux et j'ai écrit un exemple de programme pour accéder à l'une de ses tables. J'utilise 'mysql-connector-java-5.1.10.jar'Problème CLASSPATH lors de l'accès à Mysql sous Linux

Le code fonctionne bien si je mets le pot dans 'jre/lib/ext'. Cependant, d'autres façons de reconnaître ce pot ne fonctionnent pas. J'ai essayé de mettre $ CLASSPATH et j'ai essayé d'utiliser '.' répertoire actuel.

Il est à défaut avec l'erreur suivante:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306 
     at java.sql.DriverManager.getConnection(DriverManager.java:602) 
     at java.sql.DriverManager.getConnection(DriverManager.java:185) 
+0

'Cependant, d'autres façons de reconnaître que le pot ne fonctionne pas. J'ai essayé de mettre $ CLASSPATH et j'ai essayé d'utiliser '.' répertoire actuel.' s'il vous plaît élaborer ce –

+0

une façon est de définir CLASSPATH droite? Je viens juste de savoir que quand je mets CLASSPATH sous linux, je dois aussi mettre le chemin des fichiers .class dans ce CLASSPATH. Ce qui n'est pas le cas sous Windows. Windows reconnaît le fichier .class dans le répertoire en cours avec le CLASSPATH. la deuxième consiste à utiliser le répertoire en cours sans définir le CLASSPATH. Cependant, selon la réponse ci-dessous, cela ne fonctionne pas non plus. Je dois les mentionner explicitement en utilisant -cp – ernesto

Répondre

0

Je ne l'habitude d'utiliser la variable $CLASSPATH globale, la meilleure façon de le faire fonctionner est

java -cp .;/path/to/mysql-connector-java-5.1.10.jar[;<other libs>] pkg.name.MyApplication 

Sidenote

Si votre application est exportée dans un fichier jar avec un attribut Main-Class ("fichier exécutable") et commencez avec java -jar myjar.jar, puis vous devez ajouter toutes les bibliothèques requises au manifeste manifestes, $CLASSPATH et -cp sont ignorés dans ce cas. Et voilà pourquoi je ne habituellement pas utiliser l'option -jar ...

Modifier

Pour répondre à votre autre question: Si le répertoire courant a été ajouté au classpath par défaut, l'emplacement à partir duquel la l'application a été démarrée pourrait influencer l'application elle-même.

Imaginez une application dans un pot et une commande de démarrage

java -cp application.jar com.example.Main 

Maintenant, nous avons un environnement défini: seul le contenu de application.jar (et les classes jre) sont sur le chemin de classe et une partie de l'application . Si le répertoire en cours était automatiquement ajouté au chemin de classe, tous les fichiers de l'emplacement actuel (et ceux de tous les sous-dossiers) figureraient également sur le chemin de classe, que ce soit ou non. Avec un résultat, que l'application peut fonctionner si elle a démarré à partir du répertoire de base des utilisateurs, mais peut-être pas si elle a démarré à partir du répertoire racine (/).

+0

cool. Je l'ai! Vous avez aussi des questions ... pourquoi devrions-nous explicitement définir de regarder dans le répertoire courant (fichier .class et jar). – ernesto

+0

http://download.oracle.com/javase/tutorial/essential/environment/paths.html – ernesto

+0

pourquoi il ne peut pas reconnaître le répertoire actuel comme emplacement par défaut selon le document. – ernesto

Questions connexes