OVH Cloud OVH Cloud

PB avec JDBC

11 réponses
Avatar
Joseph KHOURY
Bonjour,

Je viens d'installer le drivers JDBC (mysql-connector-java-3.1.11-bin.jar)
ds le répertoire c:\j2sdk1.4.2\jre\lib\ext.La variable d'environnement
CLASSPATH= c:\j2sdk1.4.2;.;

Le problème c'est qu'en exécutant le programme ci-dessous le programme ne
trouve pas le Drivers ( affiche le message Erreur de drivers JDBC).
Avez vous une idée?

Merci de votre aide



public class test
{
public static void main(String[] args)
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Tout est OK");
}
catch (Exception E)
{
System.out.println("Erreur de drivers JDBC");
}
}
}

10 réponses

1 2
Avatar
Peyroux
Renommer mysql-connector-java-3.1.11-bin.jar par mysql-connector.jar ?

Bonjour,

Je viens d'installer le drivers JDBC (mysql-connector-java-3.1.11-bin.jar)
ds le répertoire c:j2sdk1.4.2jrelibext.La variable d'environnement
CLASSPATH= c:j2sdk1.4.2;.;

Le problème c'est qu'en exécutant le programme ci-dessous le programme ne
trouve pas le Drivers ( affiche le message Erreur de drivers JDBC).
Avez vous une idée?

Merci de votre aide



public class test
{
public static void main(String[] args)
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Tout est OK");
}
catch (Exception E)
{
System.out.println("Erreur de drivers JDBC");
}
}
}






Avatar
flipouk
Joseph KHOURY wrote:
Bonjour,

Je viens d'installer le drivers JDBC (mysql-connector-java-3.1.11-bin.jar)
ds le répertoire c:j2sdk1.4.2jrelibext.La variable d'environnement
CLASSPATH= c:j2sdk1.4.2;.;


Je pense que ton CLASSPATH n'est pas bon. Tu confonds JAVA_HOME et
CLASSPATH.
Il n'est plus nécessaire de préciser où se trouve les classes java
depuis Java 1.2.
Essaye de supprimer la variable d'environnment 'CLASSPATH', assure-toi
qu'une variable d'environnment 'JAVA_HOME' existe (avec le chemin
c:j2sdk1.4.2)
Si cela ne fonctionne toujours pas, crée une variable 'CLASSPATH', mais
donne-lui comme valeur le chemin complet, jusque et y compris le jar :
c:j2sdk1.4.2jrelibext
+ la valeur du CLASSPATH déjà existante
+ le répertoire courant
Là, je ne sais pas comment on fait sous Windows. Sous Linux, cela
donnerait :
export CLASSPATH=$CLASSPATH:/chemin/vers/mysql-connector-java.jar:.
Je crois que sous Windows il faut entrer :
%CLASSPATH%;c:j2sdk1.4.2jrelibext;. (à vérifier).

Si tu veux faire simple et ne pas t'embêter à régler ton CLASSPATH pour
tout le système (après tout, toutes tes applis ne vont pas utiliser des
connections MySQL), lance ton appli comme suit :
java -cp c:j2sdk1.4.2jrelibext;. com.package.tonappli.Main (ou
équivalent).

Bon courage,

F.

Avatar
Sébastien
flipouk wrote:
Joseph KHOURY wrote:

Bonjour,

Je viens d'installer le drivers JDBC
(mysql-connector-java-3.1.11-bin.jar) ds le répertoire
c:j2sdk1.4.2jrelibext.La variable d'environnement CLASSPATH=
c:j2sdk1.4.2;.;



Je pense que ton CLASSPATH n'est pas bon. Tu confonds JAVA_HOME et
CLASSPATH.
Il n'est plus nécessaire de préciser où se trouve les classes java
depuis Java 1.2.


tu veux dire quoi par là ??

Si tu veux faire simple et ne pas t'embêter à régler ton CLASSPATH pour
tout le système (après tout, toutes tes applis ne vont pas utiliser des
connections MySQL), lance ton appli comme suit :
java -cp c:j2sdk1.4.2jrelibext;. com.package.tonappli.Main (ou
équivalent).


c'est inutile, le répertoire 'ext' est inclus dans le classpath automatiquement (extension
classloader).
De plus, il n'est pas très propre d'ajouter des jar dans ce répertoire si c'est uniquement pour
éviter de gérer un classpath.

Il vaudrait mieux :

java -cp <chemin>mysql-connector-java-3.1.11-bin.jar;. com.package.tonappli.Main

en supposant que les classes de ton appli sont dans le répertoire courant.

Sinon, je ne vois pas pourquoi tu n'arrives pas à charger le driver en mettant le jar dans 'ext'.
Tu es sûr d'utiliser le jre correspondant ? Quelle est l'erreur exactement ?

Sébastien


Avatar
Joseph KHOURY
Bonsoir,

En fait, je cherche à comprendre pourquoi je n'arrive pas à faire
fonctionner correctement le programme vu que j'ai mis ce qu'il faut là où il
faut comme conseillé. A savoir :
- dans le répertoire
c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar
- et dans CLASSPATH= c:j2sdk1.4.2;.;

Je ne comprends pas la question Tu es sûr d'utiliser le jre correspondant ?
en fait j'avais installé j2sdk1.4.2 il y a longtemps et puis il y a une
semaine j'ai ajouté le JDBC

merci de votre aide

"Sébastien" a écrit dans le message de news:
436f3611$0$979$
flipouk wrote:
Joseph KHOURY wrote:

Bonjour,

Je viens d'installer le drivers JDBC
(mysql-connector-java-3.1.11-bin.jar) ds le répertoire
c:j2sdk1.4.2jrelibext.La variable d'environnement CLASSPATH=
c:j2sdk1.4.2;.;



Je pense que ton CLASSPATH n'est pas bon. Tu confonds JAVA_HOME et
CLASSPATH.
Il n'est plus nécessaire de préciser où se trouve les classes java depuis
Java 1.2.


tu veux dire quoi par là ??

Si tu veux faire simple et ne pas t'embêter à régler ton CLASSPATH pour
tout le système (après tout, toutes tes applis ne vont pas utiliser des
connections MySQL), lance ton appli comme suit :
java -cp c:j2sdk1.4.2jrelibext;. com.package.tonappli.Main (ou
équivalent).


c'est inutile, le répertoire 'ext' est inclus dans le classpath
automatiquement (extension classloader).
De plus, il n'est pas très propre d'ajouter des jar dans ce répertoire
si c'est uniquement pour éviter de gérer un classpath.

Il vaudrait mieux :

java -cp <chemin>mysql-connector-java-3.1.11-bin.jar;.
com.package.tonappli.Main

en supposant que les classes de ton appli sont dans le répertoire
courant.

Sinon, je ne vois pas pourquoi tu n'arrives pas à charger le driver en
mettant le jar dans 'ext'.
Tu es sûr d'utiliser le jre correspondant ? Quelle est l'erreur
exactement ?

Sébastien




Avatar
flipouk
Joseph KHOURY wrote:
Bonsoir,

En fait, je cherche à comprendre pourquoi je n'arrive pas à faire
fonctionner correctement le programme vu que j'ai mis ce qu'il faut là où il
faut comme conseillé. A savoir :
- dans le répertoire
c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar
- et dans CLASSPATH= c:j2sdk1.4.2;.;


Je viens de relire ce que je t'avais répondu... Je me suis planté.
Sébastien a raison. Ce que je voulais évidemment dire c'est :

java -cp c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;.
com.package.tonappli.Main

(J'ai foiré avec les copier/coller :( )

Pour résumer et en reprenant ton code :

1. Compile comme suit :
javac -classpath
c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;. test.java

2. Lance comme suit :
java -cp c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;.
test

Et ca devrait marcher. Sinon, donne-nous les sorties de ces commandes.

Sinon, où est-il conseillé de mettre :
CLASSPATH=c:j2sdk1.4.2;.; ???
Peux-tu nous donner un lien ? Nous pourrons te dire pourquoi on te
demande de faire cela.

Moi je te conseille de tout simplement virer la variable d'environnement
'CLASSPATH' et de toujours régler ton classpath à la main, mais bon tu
fais comme tu veux.

F.

Avatar
Joseph KHOURY
Suite à la compile telle que c'est indiqué et puis l'exécution du programme
le message d'erreur est le suivant :

echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


"flipouk" a écrit dans le message de news:
436ff5ac$0$662$
Joseph KHOURY wrote:
Bonsoir,

En fait, je cherche à comprendre pourquoi je n'arrive pas à faire
fonctionner correctement le programme vu que j'ai mis ce qu'il faut là où
il faut comme conseillé. A savoir :
- dans le répertoire
c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar
- et dans CLASSPATH= c:j2sdk1.4.2;.;


Je viens de relire ce que je t'avais répondu... Je me suis planté.
Sébastien a raison. Ce que je voulais évidemment dire c'est :

java -cp c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;.
com.package.tonappli.Main

(J'ai foiré avec les copier/coller :( )

Pour résumer et en reprenant ton code :

1. Compile comme suit :
javac -classpath
c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;. test.java

2. Lance comme suit :
java -cp c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;.
test

Et ca devrait marcher. Sinon, donne-nous les sorties de ces commandes.

Sinon, où est-il conseillé de mettre :
CLASSPATH=c:j2sdk1.4.2;.; ???
Peux-tu nous donner un lien ? Nous pourrons te dire pourquoi on te demande
de faire cela.

Moi je te conseille de tout simplement virer la variable d'environnement
'CLASSPATH' et de toujours régler ton classpath à la main, mais bon tu
fais comme tu veux.

F.



Avatar
flipouk
Joseph KHOURY wrote:
Suite à la compile telle que c'est indiqué et puis l'exécution du programme
le message d'erreur est le suivant :

echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


1. Je viens de tester ton code. Ca fonctionne chez moi (je suis sous
Debian et en Java 5 donc ce n'est pas tout à fait la même config que toi...)

2. Comment peux-tu avoir un message d'erreur comme ca avec le code que
tu as posté ???
- "echec pilote" (message d'erreur en francais ?)
- Tu devrais au moins avoir "Erreur de drivers JDBC", c'est-à-dire le
message de ta clause catch.

3. Vérifie ton jar, peut-être le problème vient de là (corruption de
fichier jar) :
jar -tvf mysql-connector-java-3.1.11-bin.jar
(cela devrait te lister le contenu du jar).

4. Peux-tu refaire le test avec le code suivant :

public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Tout est OK");
} catch (Exception e) {
e.printStackTrace();
}
}
}

et nous envoyer la sortie console...

Pour que tu puisses comparer, ca donne ca chez moi (j'ai copié
mysql-connector-java-3.1.11-bin.jar dans le répertoire courant pour
simplifier) :

$ javac Test.java
$ java -cp mysql-connector-java-3.1.11-bin.jar:. Test
Tout est OK
$ java Test
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at Test.main(Test.java:4)

F.

Avatar
Joseph KHOURY
Enfin ça marche.Merci
Mais j'ai rien compris. Message en sortie ==> Tout est OK

A/ 1ere méthode

1. Compile comme suit :
javac -classpath
c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;. Test.java

2. Lance comme suit :
java -cp c:j2sdk1.4.2jrelibextmysql-connector-java-3.1.11-bin.jar;.
Test

Ca marche ==> Tout est OK

B/ 2éme méthode
----------------------------------------------------------------
public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Tout est OK");
} catch (Exception e) {
e.printStackTrace();
}
}
}

et nous envoyer la sortie console...

Pour que tu puisses comparer, ça donne ça chez moi (j'ai copié
mysql-connector-java-3.1.11-bin.jar dans le répertoire courant pour
simplifier) :

$ javac Test.java
$ java -cp mysql-connector-java-3.1.11-bin.jar:. Test
---------------------------------------------------------
ça marche ==> Tout est OK

-----------------------------------------------------------
$ java Test
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at Test.main(Test.java:4)
-------------------------------------------------------------------------
ça ne marche pas


NB : Pour le message "echec pilote : java.lang.ClassNotFoundException:
com.mysql.jdbc.Driver" ce message correspondait à un autre programme qui lui
aussi utilise JDBC.


En résumé: si j'ai bien compris c'est le .jar qui est corronpu et qu'il faut
que je le télécharge de nouveau. je vais essayer. Merci bien de ton aide.
si la conclusion ce n'est pas merci de m'informer.

A signaler que je suis sous Windows XP



"flipouk" a écrit dans le message de news:
437119a9$0$23280$
Joseph KHOURY wrote:
Suite à la compile telle que c'est indiqué et puis l'exécution du
programme le message d'erreur est le suivant :

echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


1. Je viens de tester ton code. Ca fonctionne chez moi (je suis sous
Debian et en Java 5 donc ce n'est pas tout à fait la même config que
toi...)

2. Comment peux-tu avoir un message d'erreur comme ça avec le code que tu
as posté ???
- "echec pilote" (message d'erreur en francais ?)
- Tu devrais au moins avoir "Erreur de drivers JDBC", c'est-à-dire le
message de ta clause catch.

3. Vérifie ton jar, peut-être le problème vient de là (corruption de
fichier jar) :
jar -tvf mysql-connector-java-3.1.11-bin.jar
(cela devrait te lister le contenu du jar).

4. Peux-tu refaire le test avec le code suivant :

public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Tout est OK");
} catch (Exception e) {
e.printStackTrace();
}
}
}

et nous envoyer la sortie console...

Pour que tu puisses comparer, ça donne ça chez moi (j'ai copié
mysql-connector-java-3.1.11-bin.jar dans le répertoire courant pour
simplifier) :

$ javac Test.java
$ java -cp mysql-connector-java-3.1.11-bin.jar:. Test
Tout est OK
$ java Test
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at Test.main(Test.java:4)

F.
"flipouk" a écrit dans le message de news:

437119a9$0$23280$
Joseph KHOURY wrote:
Suite à la compile telle que c'est indiqué et puis l'exécution du
programme le message d'erreur est le suivant :

echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


1. Je viens de tester ton code. Ca fonctionne chez moi (je suis sous
Debian et en Java 5 donc ce n'est pas tout à fait la même config que
toi...)

2. Comment peux-tu avoir un message d'erreur comme ca avec le code que tu
as posté ???
- "echec pilote" (message d'erreur en francais ?)
- Tu devrais au moins avoir "Erreur de drivers JDBC", c'est-à-dire le
message de ta clause catch.

3. Vérifie ton jar, peut-être le problème vient de là (corruption de
fichier jar) :
jar -tvf mysql-connector-java-3.1.11-bin.jar
(cela devrait te lister le contenu du jar).

4. Peux-tu refaire le test avec le code suivant :

public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Tout est OK");
} catch (Exception e) {
e.printStackTrace();
}
}
}

et nous envoyer la sortie console...

Pour que tu puisses comparer, ca donne ca chez moi (j'ai copié
mysql-connector-java-3.1.11-bin.jar dans le répertoire courant pour
simplifier) :

$ javac Test.java
$ java -cp mysql-connector-java-3.1.11-bin.jar:. Test
Tout est OK
$ java Test
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at Test.main(Test.java:4)

F.



Avatar
flipouk
Joseph KHOURY wrote:
Enfin ça marche.Merci
Mais j'ai rien compris. Message en sortie ==> Tout est OK



En fait ce que tu appelles deux méthodes n'en font qu'une. Dans les deux
cas, tu donnes à l'option '-cp' (= '-classpath') l'argument
'unfichier.jar'. Il est simplement situé à deux endroits différents du
disque. Si ca fonctionne c'est que ton fichier jar n'est pas corrompu.

Je te conseille de te familiariser avec cette méthode pour utiliser des
libs externes car tu vas en avoir très souvent besoin.

Cela dit, placer ton fichier jar dans $JAVA_HOME/jre/lib/ext devrait
fonctionner. Je ne comprends pas pourquoi ca ne marche pas. As-tu bien
réglé ta variable d'environnement 'JAVA_HOME' ?

Avatar
Joseph KHOURY
Bonsoir,

En fait, je n'ai pas de variable 'JAVA_HOME'. J'ai seulement la variable
'classpath'. Est -ce qu'il y a vraiment besoin de cette variable? si oui
quelle valeur lui attribuer?

J'ai en effet déclaré la variable comme suit : JAVA_HOME =
c:j2sdk1.4.2jrelibext comme variable d'environnement
==> résultat pour java Test
$ java Test
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at Test.main(Test.java:4)
-------------------------------------------------------------------------
ca ne marche pas.

Désolé de t'embêter... mais je ne comprends tjs pas.

"flipouk" a écrit dans le message de news:
4371bbd3$0$349$
Joseph KHOURY wrote:
Enfin ça marche.Merci
Mais j'ai rien compris. Message en sortie ==> Tout est OK



En fait ce que tu appelles deux méthodes n'en font qu'une. Dans les deux
cas, tu donnes à l'option '-cp' (= '-classpath') l'argument
'unfichier.jar'. Il est simplement situé à deux endroits différents du
disque. Si ca fonctionne c'est que ton fichier jar n'est pas corrompu.

Je te conseille de te familiariser avec cette méthode pour utiliser des
libs externes car tu vas en avoir très souvent besoin.

Cela dit, placer ton fichier jar dans $JAVA_HOME/jre/lib/ext devrait
fonctionner. Je ne comprends pas pourquoi ca ne marche pas. As-tu bien
réglé ta variable d'environnement 'JAVA_HOME' ?




1 2