Erreur à la compilation en utilisant driver postgresql. Classpath? - Java - Programmation
Marsh Posté le 21-09-2009 à 03:39:57
Plusieurs choses:
1) Tu dois passer ton classpath au compilateur javac ET à la JVM java à l'exécution. Ici tu ne parles que de le passer au compilateur (javac) et pourtant tu as l'air d'exécuter un programme de test (java).
2) Le compilateur ne veut pas compiler ton code parce qu'il te demande de catcher ou thrower ClassNotFoundException puisque cette exception peut être levée à l'exécution par la méthode Class.forName(). Il ne dit pas qu'il ne trouve pas postgreSQL, il dit juste que ton code doit prévoir le cas où il ne le trouve pas (je rappelle qu'on est à la compilation et pas à l'exécution). Donc ajoute un "throws ClassNotFoundException" à ta méthode ou un try { ... } catch (ClassNotFoundException e) autour du code.
Le mieux est d'utiliser un IDE comme Eclipse ou Netbeans pour développer et compiler, afin d'éviter ce genre d'erreur de débutant.
Marsh Posté le 21-09-2009 à 08:39:12
Le mieux serait surtout de comprendre la différence entre execution et compilation, surtout en tant que débutant.
Marsh Posté le 21-09-2009 à 09:07:10
Merci java c'est pas mon premier langage compilé, "convention over configuration" ça ne s'applique pas qu'à Rails
cbeyls avait bien vu, il fallait wrapper un try...catch... mais ça le message d'erreur était pas ultra explicite pour un nouveau chez java.
Marsh Posté le 21-09-2009 à 09:13:25
Je vois mal comment on aurait pu faire plus explicite comme message....?
Marsh Posté le 21-09-2009 à 00:45:26
J'ai un répertoire /home/igarimasho/java_test/ qui contient un fichier Application.java:
ainsi que le fichier postgresql.jar
Je tente une compilation avec la commande suivante:
Et forçément le compilateur me crache à la figure:
Application.java:6: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
Class.forName("org.postgresql.Driver" );
^
1 error
Où est le problème?
EDIT: j'ai googlé, et d'autres personnes ont le même problème, mais j'ai pas la solution où du moins l'explication de la source du problème
EDIT: issue de la doc du driver postgresl: http://jdbc.postgresql.org/documentation/84/load.html
The forName() method can throw a ClassNotFoundException if the driver is not available.
Cool, mais mon classpath a l'air bon!
EDIT: bourdel, en ajoutant à mon code:
Je vois que l'option du classpath ne passe pas correctment au compilateur. Pourquoi???
En fait l'output complet de l'appli est: (je suis sous Osx)
Et mon postgresql.jar il est passé où?
Message édité par igarimasho le 21-09-2009 à 01:11:31