2013-07-24 1 views
1

Я получаю следующее сообщение об ошибке: ClassNotFoundExceptionClassNotFoundException Зависимости в 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) 

На моем IntelliJ IDE я уверен, что я установить зависимости должным образом на Maven: , потому что на моей внешней библиотеки папки, есть список «Maven: com.oracle:ojdbc6:11.2.0.1.0».

Я предполагаю, что проблема в том, что мой код не может правильно обращаться к классу.

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

Я понимаю, что драйверы JDBC не в репо Maven, так что мне пришлось скачать прямо с сайта оракула (правильный номер версии) и загрузить его в моей библиотеке. Затем я успешно добавил зависимость pom.xml.

Maven: ojdbc dependency installed

Наконец, вот мой pom.xml:

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

Спасибо!

EDIT: Проблема по-прежнему возникает, несмотря на то, что класс OracleDriver адресуется. enter image description here

EDIT2: Вот посмотрите в мои настройки модуля/зависимостей на InnteliJ enter image description here

+0

Это неправильное имя водителя. Это похоже на имя пакета/версии. Прочтите javadoc методов, которые вы используете перед их использованием. –

+0

Можете ли вы уточнить? – bigbitecode

+0

Я расскажу вам, что делает 'Class.forName (String)'. –

ответ

1

Старый (jdbc3) способ загрузки драйверов jdbc состоял в том, чтобы загрузить их с помощью Class.forName(String). У каждого драйвера, вероятно, был статический блок, который заставлял их регистрироваться с помощью DriverManager.

Строка, которую вы передаете, является Class.forName(String) - это полное имя класса Водителя. Поэтому com.oracle.ojbdc6 и com.oracle.ojbdc6-11.2.0.1.0 бессмысленны, если только они не являются действительными классами на вашем пути к классу.

Вместо com.oracle.ojbdc6 в

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

использования либо oracle.jdbc.driver.OracleDriver или oracle.jdbc.OracleDriver, которые оба класса драйвера. Это зависит от того, какую версию драйвера jdbc вы используете.

Связанный answer.

+0

Спасибо, что поделились со мной, Сотириос, я просмотрел соответствующий ответ и попробовал «java.lang.String», чтобы увидеть, был ли мой строковый путь плохим. Разумеется, в классе строк нет жалобы. Я предполагаю, что это означает, что я испортил настройку classpath. Как я могу убедиться, что правильно его установил? – bigbitecode

+0

Ваш путь к классу, вероятно, прав. Просто измените имя класса на то, что я вложил в свой ответ. Если нет, если intellij имеет некоторую функцию поиска, попробуйте найти класс. Если вы можете найти его, это, вероятно, на пути к проекту. –

0

она не должна быть ojdbc6 вместо ojbdc6?

+0

Даже если OP исправляет это, будет ли водитель, которого он хочет загрузить? –