2013-07-24 3 views
1

Je reçois l'erreur suivante: ClassNotFoundExceptiondépendances ClassNotFoundException dans IntelliJ

java.lang.ClassNotFoundException: com.oracle.ojbdc6-11.2.0.1.0 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at uk.ac.ebi.mydas.examples.Conn.main(Conn.java:23) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

Sur mon IntelliJ IDE, je suis sûr que je l'ai mis les dépendances correctement sur Maven: parce que sur mon dossier de bibliothèques externes, il y a un paquet "Maven: com.oracle:ojdbc6:11.2.0.1.0" listé.

Je suppose qu'il y a un problème avec mon code ne pas pouvoir traiter la classe correctement.

try { 
    Class.forName("com.oracle.ojbdc6"); 
} 

Je me rends compte que les pilotes JDBC ne sont pas dans le repo Maven, donc je devais le télécharger directement depuis le site oracle (numéro de version correcte) et le charger à ma bibliothèque. J'ai ensuite ajouté la dépendance pom.xml avec succès.

Maven: ojdbc dependency installed

Enfin, voici mon pom.xml:

<dependency> 
     <groupId>com.oracle</groupId> 
     <artifactId>ojdbc6</artifactId> 
     <version>11.2.0.1.0</version> 
    </dependency> 

Merci!

EDIT: Un problème persiste malgré la classe OracleDriver adressée. enter image description here

EDIT2: Voici un coup d'oeil dans mon module/dépendances configuration sur InnteliJ enter image description here

+0

Ce n'est pas le bon nom de pilote. Cela ressemble à un nom de paquet/version. Lisez le javadoc des méthodes que vous utilisez avant de les utiliser. –

+0

Pouvez-vous élaborer? – bigbitecode

+0

Je vais élaborer si vous me dites ce que 'Class.forName (String)' fait. –

Répondre

1

L'ancienne méthode (jdbc3) de chargement des pilotes jdbc consistait à les charger avec Class.forName(String). Chaque pilote avait probablement un bloc statique qui les a fait s'enregistrer avec le DriverManager.

La chaîne que vous transmettez à Class.forName(String) est le nom de classe complet du pilote. Par conséquent, com.oracle.ojbdc6 et com.oracle.ojbdc6-11.2.0.1.0 sont sans signification sauf s'ils sont des classes réelles sur votre chemin de classe.

Au lieu de com.oracle.ojbdc6 dans

try { 
    Class.forName("com.oracle.ojbdc6"); 
} 

utilisation soit oracle.jdbc.driver.OracleDriver ou oracle.jdbc.OracleDriver, qui sont les deux classes du pilote. Cela dépend de la version du pilote jdbc que vous utilisez. Il s'agit d'un answer associé.

+0

Merci d'avoir porté sur moi, Sotirios, j'ai regardé dans la réponse liée et j'ai essayé "java.lang.String" juste pour voir si mon chemin de corde était mauvais. Effectivement, il n'y a pas de plainte avec la classe de cordes. Je suppose que cela signifie que j'ai raté avec la mise en place du classpath. Comment puis-je m'assurer de le régler correctement? – bigbitecode

+0

Votre chemin de classe a probablement raison. Changez juste le nom de classe en ce que j'ai mis dans ma réponse. Si non, si intellij a une fonction de recherche, essayez de trouver la classe. Si vous pouvez le trouver, c'est probablement sur votre classpath de projet. –

0

devrait pas être ojdbc6 au lieu de ojbdc6?

+0

Même si l'OP corrige cela, le pilote qu'il veut charger? –

Questions connexes