Класс драйвера oracle jdbc driver oracledriver не может быть загружен
org.springframework.beans.MethodInvocationException: свойство 'driverClassName' выбросило исключение; вложенное исключение - java.lang.IllegalStateException: не удалось загрузить класс драйвера JDBC [oracle.jdbc.driver.OracleDriver]
а мой файл xml выглядит следующим образом:
кто-нибудь, помогите мне решить эту проблему. заранее спасибо.
4 ответа
В вашем pom.xml добавьте эту зависимость :
Добавьте следующую зависимость в pom.xml
У меня была та же проблема, даже при добавлении зависимости maven в мой pom.xml
и это сработало для моего проекта.
Добавьте этот файл jdbc-oracle.jar в свой проект.
Похожие вопросы:
Я написал код для запуска запроса с использованием JDBC на Spring, но я получаю исключение (см. ниже) Вот мой context.xml <bean >
Spring набор инструментов не может найти JDBC класс драйвера
Во время построения проекта я получил ошибку: Не удалось загрузить JDBC класс драйвера [com.mysql.jdbc.Driver] У меня есть jdbc разъем, подключенный к моему проекту.
Я пытаюсь настроить ActiveMQ persitenceAdapter на базу данных Oracle 11g (11.2). При запуске ActiveMQ через оболочку Tanuki я получаю исключение не может загрузить JDBC класс драйвера.
Я получаю эту ошибку со вчерашнего дня, и хотя я перепробовал все, что пришло мне в голову, или нашел в Интернете, я не могу ее решить. Контекст: java 6, Spring 3.1.4, верблюд 2.11.1, Oracle.
Я хочу подключить свое приложение Java SpringBoot к SQL Server и получить информацию о том, что spring не может загрузить класс драйвера. Я пытался.
Я получаю ту же ошибку, что и в exception is java.lang.IllegalStateException: не удалось загрузить класс драйвера JDBC . Я добавил ojdbc14.jar внутри src/main/resources/lib. Все еще получаю:-.
Я пытаюсь создать соединение JDBC через объект datasource с DriverManagerDatasorce.each раз, когда я запускаю свое приложение, получаю Вызвано.
У меня есть ojbcd8.jar, и я хочу использовать его локально в моем проекте gradle, который разрабатывается в intelliJ. Я добавил jar в свой проект следующим образом : И у меня также есть следующая.
Репутация: нет
Всего: 2
Код |
Connection connection = null; Statement statement = null; ResultSet resultset = null; |
Пепвоначально пытался приконнектиться с помощью Hibernate, ругалось на маппинг, хотя дело было явно не в нём.
Решил проверить как вообще с коннектом с таким драйвером и такими параметрами, и вот.
Oracle 10g, бесплатная версия.
SQL*Plus к ораклу коннектится нормально.
Веб-сервер Томкат(подключаюсь из jsp).
Репутация: нет
Всего: 2
Сейчас подумал - может быть не хватает какого-то оракловского сервиса для коннекта из стороннего приложения.
У меня был запущен только OracleServiceORCL.
Сейчас запустил все службы, кроме двух. Не удалось запустить OracleCSService и OracleOraDb10g_home1TNSListener.
При запуске OracleOraDb10g_home1TNSListener выдается ошибка "Не найден указанный файл".
Эти службы нужны для коннекта через JDBC?
Для работы с SQL*Plus хватает OracleServiceORCL.
Репутация: 8
Всего: 56
вроде ты не первый с такой проблемой.
почитай тут и тут если не поможет , тогда тут
Репутация: 24
Всего: 151
Вообще, лисенер - это тот самый процесс, который и нужен для установления соединения. Но раз ты нормально коннектишься через SQL Plus - наверное, проблема не в нём (хотя я не знаю, задействует ли SQLPlus лисенер в случае локалхоста).
Попробуй подключиться удаленно к своей базе через SQLPlus. Если не получится - проблема, скорее всего, в лисенере.
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)ЖоржЖЖ
Репутация: нет
Всего: 2
Я сейчас попробовал ввести в поле Host String формы для логина SQL*Plus IP-шник 127.0.0.1, имитируя удаленное соединение.
SQL*PLus выдает ошибку ORA-12541: TNS:no listener.
Так и есть - у меня не установился сервис OracleOraDb10g_home1TNSListener.
Похоже, поможет только переустановка Oracle.
Добавлено @ 18:40
Судя по результату эксперимента не задействует, если не указать хост явно. Я прежде всегда коннектился с пустым полем Host String и проблем не было.
Leprechaun Software Developer
Репутация: 206
Всего: 534
Без TNSListener никто не может соединиться с Oracle.
SQL*Plus запрашивает не имя хоста, а имя сервиса прописанное в конфигурации Net8.
В твоём коде ошибка, ты используешь URL thin драйвера, а загружаешь Oci8 драйвер.
Репутация: 33
Всего: 81
Извините за offtopic, но как вы это определили? Объясните, пожалуйста.
Leprechaun Software Developer
Репутация: 206
Всего: 534
Репутация: 33
Всего: 81
Репутация: 24
Всего: 151
ЖоржЖЖ
Leprechaun Software Developer
Репутация: 206
Всего: 534
Репутация: нет
Всего: 2
Я пробовал и так.
Странно, а почему поле называется Host String?
Если заглянуть в сервисы Windows, то там есть сервис OracleOraDb10g_home1TNSListener, он не запущен и при попытке его запустить выдается ошибка: "Не удается запустить службу, не найден указанный файл".
Может в десятке что-то изменилось?
Репутация: 31
Всего: 132
Репутация: нет
Всего: 2
Цитата |
To verify whether you are hitting this problem, verify whether the Oracle instance is configured for Multithreaded Server (MTS). If the Oracle instance is not configured for MTS, you are probably encountering a different problem. |
Не тут ли собака порылась?
Добавлено через 5 минут и 47 секунд
То есть может быть у меня Oracle не сконфигурирован как Multithreaded Server и это ошибочно воспринимается как отсутствие TNS Listener`а?
Репутация: 24
Всего: 151
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
- Прежде, чем задать вопрос, прочтите это!
- Книги по Java собираются здесь.
- Документация и ресурсы по Java находятся здесь.
- Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
- Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
- Действия модераторов можно обсудить здесь.
- FAQ раздела лежит здесь.
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.
[ Время генерации скрипта: 0.1452 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Я установил сторонний java webservice, который использует тонкий драйвер Oralce jdbc для записи данных в базу данных Oracle. Когда я запускаю это, я получаю следующую ошибку:
JDBC Класс драйвера не найден: oracle.jdbc.OracleDriver
Я установил oracle и установил переменную classpath в следующее значение:
* D:\оракул\продукт\10.2.0\client_1\JDBC\Lib\classes12.jar; D:\оракул\продукт\10.2.0\client_1\JDBC\Lib\classes12.zip; D:\оракула\product\10.2.0\client_1\jdbc\lib\ojdbc14.jar; D:\oracle\product\10.2.0\client_1\jdbc\lib\ojdbc14.zip; C:\Program Files\Java\jdk1.7.0\JRE\Lib\rt.jar *
и переменной пути до следующего значения;
* D:\oracle\product\10.2.0\client_1\bin; C:\Program Files\Java\jdk1.7.0\bin \; D:\oracle\product\10.2.0\client_1\jdbc\lib\classes12.jar; D:\Oracle\продукт\10.2.0\client_1\JDBC\Lib\classes12.zip; D:\Oracle\продукт\10.2.0\client_1\JDBC\Lib\ojdbc14.jar; D:\оракул\продукт\10.2.0\client_1\JDBC\Lib\ojdbc14.zip *
Любое предложение о том, почему веб-служба не может идентифицировать драйвер jdbc?
Я знаю два способа превращения Java-приложения в службу Windows, и оба они не используют CLASSPATH . Одним из них является Java Service Wrapper от Tanuki Software. Этот инструмент использует wrapper.conf , где вы можете показывать каталоги с библиотеками .jar :
Второй инструмент, который я знаю, JSL: Java Service Launcher. В этом инструменте есть jsl.ini , где вы помещаете командную строку для запуска своего сервера. Он может использовать java с опцией -cp , чтобы показать расположение библиотек .jar :
В обеих конфигурациях вы можете использовать * , чтобы добавить все файлы .jar , или вы можете показывать эти файлы по одному (как в CLASSPATH ).
Сначала вы должны знать, что пытается выполнить Windows. Проверьте его на странице свойств сервиса. Затем попробуйте локализовать его конфигурацию. Если он использует один из инструментов, которые я знаю, вы знаете, что менять. Другие инструменты, вероятно, имеют аналогичную конфигурацию.
Убедитесь, что у вас есть файл jar файла ojdbc (убедитесь, что вы используете правильный, потому что в зависимости от версии java вам может понадобиться выбрать другой).
Вам также нужно добавить jdbc jar в свой путь к серверу. если tomcat, щелкните по вашим проектам Project- > run as- > run, щелкните по пути к классам и добавьте jdbc jar в параметр Добавить внешние банки.
добавьте ojdbc-6.jar в каталог lib для установки tomcat. Maven будет поддерживать эту банку для вас в каталоге .m2, но вам также нужно иметь эту банку в tomcat lib.
Способ 1:
Загрузить ojdbc.jar
компилируется и запускается
но коннект не видит класс:
begin test
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:XE
end test
интересно, однако, что import-то вроде проходит, иначе бы не компилировалось.
стоит отметить, что для простоты всё в одной директории.
ojdbc6.jar там же.
может не очень хорошо, но я выбрал пока так.
никакой IDE, только командная строка.
"C:\Program Files\Java\jdk1.7.0_79\bin\javac" -classpath ".;.\*" .\test.java
"C:\Program Files\Java\jdk1.7.0_79\bin\java" test -classpath ".;.\*"
пробовал писать jar явно: -classpath ".;.\ojdbc6.jar"
чё может быть ?
может jar какой-то не той версии ?
но я вроде последний качал.
1. Драйвер надо загрузить: Class.forName("oracle.jdbc.OracleDriver" );
2. У языка Java есть стандарты по форматированию кода, рекомендую
а Class.forName я тоже пробовал
begin test
forname fail
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:XE
end test
а вот здесь уже classpath
ojdbc6.jar реализует спеку JDBC 4, одно из улучшений которой "Auto-loading of JDBC driver class", так что ни Class.forName, ни DriverManager.registerDriver уже необязательны. даже DriverManager.registerDriver ?а как тогда коннект ?
Вообще, даже до JDBC 4 почти никто явно не использовал registerDriver() напрямую, т.к. это делает сам друйвер. Такой вызов можно было увидеть разве что в паре registerDriver()/deregisterDriver(). Слышал что-то такое, но с jdbc не работаю, так что допускаю, что отстал от жизни :)
неужели в доке по jdbc-хеловорлду не сказано про необходимый Class.forName?
Edited at 2016-01-29 10:02 am (UTC)
в тех источниках что мне гугл выдавал
сказано что для последних версий JDBC не нужно
я по любому пробовал, но неудачно (см. выше)
про новый JDBC не знал, действительно, оказывается не нужно уже Class.forName.но в любом случае если у вас Class.forName("oracle.jdbc.OracleDriver" ) выдаёт CNFE, то это значит jar не в путях.
вот я явно указываю -classpath
C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" test -classpath ".;.\ojdbc6.jar"
почему может не работать ?
Пусть будет
C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" test -classpath .;ojdbc6.jar
Если не поможет, попробовать прописать полный путь к джару ojdbc6.jar, а так же попробовать заново скачать ojdbc6.jar (вдруг он покораптился). Меня смущает, что -classpath стоит после запускаемого класса test, т.е. jre попытается передать и -classpath и ".;./ojdbc5.jar" как параметры классу.
Попробуйте . java -cp ojdbc6.jar test
И да, имена классов таки лучше с заглавной писать сразу, доведя до автоматизма/привычки.
таки да.
а я ступил потому что оно видимо сам класс test находило потому что . это по умолчанию.
правда, вылез другой косяк.
C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" -classpath ".;.\*" test
begin test
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
Если же нужно что-то простое для учёбы с jdbc, то проще поставиль локальный MySQL, IMHO. Если нужно простое для учёбы с JDBC, то прямо с JDK поставляется DerbyDB. Раньше точно поставлялась.
Если хочется отдельное что-то, то H2DB в память или в файл тоже сильно проще чем ставить мускл или что ещё. Под виндой-то. "стоит отметить, что для простоты все в одной директории" -- в какой?
Способы решения вашей проблемы по убыванию вероятности срабатывания.
1)Ваша строка для компиляции хороша, но строка для запуска кривая. Сначала следует писать java, потом опции (вроде -classpath) и только потом имя класса запускаемого. Поставьте "test" в конец.
Иначе то что у вас -classpath на самом деле просто пойдёт как аргумент вызова в метод main. Ради проверки попробуйте вывести в System.out параметр "args".
Правильная строка запуска:
C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" -classpath ".;.\ojdbc6.jar" test
2) Я надеюсь способ "1" всё решил :) Но вот на всякий случай ещё способ.
Даже если ojdbc6 радостно совместим с JDBC4 и позволяет загружать драйвер автоматически, никто не запрещает вам сделать попытку найти класс в явной форме
Если эта штука вываливает CNFE, то:
* у вас проблемы с рантайм класспассом (не попал джар в него, не попал)
* в этом джарнике реально нет этого класса. jar - это просто зип. Можно распаковать и заглянуть внутрь.
Дополнительные заметки:
Имя класса в Java принято писать с большой буквы, методов - с маленькой. Всё КэмэлКейсом.
Java7 уже не торт, следует использовать jdk 1.8
ojdbc6 уже тоже стар, сайт оракла вещает о ojdbc7.jar
Читайте также: