Как установить драйвер JDBC в веб-проект Eclipse, не сталкиваясь с java.lang.ClassNotFoundException
-
23-09-2019 - |
Вопрос
Есть ОЧЕНЬ похожий вопрос для моего, но в моем случае у меня нет дубликатов jar в моем пути сборки, поэтому решение для меня не работает.Я искал в Google уже пару часов, но ни одно из решений, которые я там нашел, на самом деле не решает мою проблему.Я создаю веб-сайт с некоторым подключением к базе данных для выполнения домашнего задания.Я использую базу данных MySQL, разрабатываемую в Eclipse и работающую в Windows.
Я продолжаю получать java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
со следующим кодом:
import java.sql.*;
//...
public void someMethodInMyServlet(PrintWriter out)
{
Connection connection = null;
PreparedStatement query = null;
try {
out.println("Create the driver instance.<br>");
Class.forName("com.mysql.jdbc.Driver").newInstance();
out.println("Get the connection.<br>");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret");
query = connection.prepareStatement( "SELECT * FROM customers");
//...
} catch (Exception e)
{
out.println(e.toString()+"<br>");
}
}
//...
Когда я запускаю приведенный выше код, я получаю следующий вывод:
Create the driver instance.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Это не проходит мимо Class.forName...
очередь, и я не могу понять почему!Вот что я сделал:
- Скачайте mysql-connector.
- Поместите это в мою папку MySQL
C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar
. - Открыл свойства проекта в Eclipse.
- Добавьте Внешний Jar к моему пути сборки, и я выбрал
mysql-connector-java-5.1.12-bin.jar
.
Каждый раз, когда я пытаюсь использовать сервлет, я получаю одну и ту же ошибку, независимо от того, есть ли у меня там jar или нет.Не могли бы вы помочь мне разобраться в этом?
Решение
Что касается каждой «сторонней» библиотеки в виде файла JAR, которая будет использоваться веб-приложением, просто скопируйте/перетащите физический файл JAR в папку веб-приложения. /WEB-INF/lib
.Затем он будет доступен в пути к классам веб-приложения по умолчанию.Кроме того, Eclipse достаточно умен, чтобы это заметить.Не нужно возиться с buildpath.Однако обязательно удалите все ненужные ссылки, которые вы добавили ранее, иначе это может привести к коллизии.
Альтернативой является установка его на самом сервере, поместив физический файл JAR на собственный сервер. /lib
папка.Это необходимо, когда вы используете источник данных пула соединений JDBC, предоставленный сервером, которому, в свою очередь, требуется драйвер MySQL JDBC.
Смотрите также:
- Как добавить библиотеки JAR в проект WAR, не сталкиваясь с java.lang.ClassNotFoundException?Путь к классам, путь сборки и /WEB-INF/lib
- Как мне подключиться к базе данных/источнику данных JDBC в приложении на основе сервлетов?
- Где мне нужно разместить драйвер JDBC для пула соединений Tomcat?
- ПУТЬ К КЛАССАМ JDBC не работает
Другие советы
Поскольку вы запускаете его в servlet
, вам нужно, чтобы банка была доступна контейнер сервлетов.Вы либо включаете соединитель как часть своего приложения war
или поместите его как часть расширенной библиотеки контейнера сервлетов и средств управления источниками данных, если таковые имеются.Вторая часть полностью зависит от имеющегося у вас контейнера.
Остальные правы в том, что JAR-файл драйвера доступен для вашего контейнера сервлетов.Мой комментарий был призван предложить вам проверить из командной строки, не поврежден ли сам драйвер.
Вместо пустого main()
, попробуйте что-нибудь вроде этого, адаптированное из прилагаемой документации:
public class LoadDriver {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
}
}
На моей платформе я бы сделал это:
$ ls mysql-connector-java-5.1.12-bin.jar mysql-connector-java-5.1.12-bin.jar $ javac LoadDriver.java $ java -cp mysql-connector-java-5.1.12-bin.jar:. LoadDriver
На вашей платформе вам необходимо использовать ;
в качестве разделителя путей, как обсуждалось здесь и здесь.
Поместите mysql-connector-java-5.1.6-bin.jar в папку \Apache Tomcat 6.0.18\lib.Ваша проблема будет решена.
Просто выполните следующие действия:
1) Установите eclipse
2) Импортируйте Apache в eclipse
3) Установите mysql
4) Загрузите mysqlconnector/J
5) Распакуйте архивированный файл, просматривайте его до тех пор, пока не найдете в нем файл bin.Затем поместите все файлы, которые присутствуют в папке, содержащей bin, в C:\Program Files\mysql\ mysql server5.1/
затем укажите тот же путь, что и адрес, при определении драйвера в eclipse.
Это все очень просто, ребята.
Чего не следует делать (особенно при работе над общим проектом)
Хорошо, после того, как возникла та же проблема и после прочтения некоторых ответов здесь и в других местах.кажется, что положить external lib
в WEB-INF/lib
это не такая уж хорошая идея pollute webapp/JRE libs with server-specific libraries
- для получения дополнительной информации проверьте этот ответ"
Другое решение, которое я НЕ рекомендую: скопировать его в папку tomcat/lib.хотя это может сработать, будет сложно управлять зависимостями для общего проекта (например, git).
Хорошее решение 1
Создавать vendor
папка.поместите туда все свои внешние библиотеки.затем сопоставьте эту папку как зависимость с вашим проектом.в затмении вам нужно
- добавьте свою папку в
build path
Project Properties
->Java build path
Libraries
-> добавить внешнюю библиотеку или любое другое решение для добавления файлов/папки
- добавьте свой путь сборки в
deployment Assembly
(ссылка)Project Properties
->Deployment Assembly
Add
->Java Build Path Entries
- Теперь вы должны увидеть список библиотек на пути сборки, которые вы можете указать для включения в готовый WAR.
- Выберите те, которые вам нужны, и нажмите «Готово».
Хорошее решение 2
Использовать maven
(или любая альтернатива) для управления зависимостью проекта
Если проблема все еще сохраняется,
Поместите файл- mysql-connector-java-5.0.8-bin в место внутри вашей Tomcat-> lib-> папки (независимо от того, где вы установили свой Tomcat).И измените переменную среды (для этого щелкните Свойства Mycomputer -Дополнительные системные настройки- Переменные среды) и задайте новое имя переменной и значения переменных в качестве места, где находится ваш lib-файл.Не забудьте ввести ;в конце пути)
Если проблема все еще не устранена Попробуйте загрузить commons-collections-2.0.jar (http://www.docjar.com/jar_detail/commons-collections-2.0.jar.html) и вставьте jar в то же место, где находится ваш mysql jar (т.е.) внутри Tomcat-lib.
Очистите свой проект-Остановите свой сервер - Наконец, попробуйте запустить.
Много раз я сталкивался с этой проблемой, я сталкивался с ClassNotFoundException.если jar не находится в физическом местоположении.
Поэтому убедитесь .файл jar (mysql connector) находится в физическом расположении папки WEB-INF lib.и обязательно перезапустите Tomcat, используя команду shutdown в cmd.это должно сработать.
Единственное решение, которое мне помогло, — это поместить файл .jar в WEB-INF/lib .Надеюсь, это поможет.
предполагая, что ваш проект основан на Maven, добавьте его в свой POM:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
Сохраните > Создать > и снова проверьте соединение.Оно работает!Фактическая версия Java-коннектора MySQL может отличаться.
Поместите mysql-connector-java-5.1.38-bin.jar в папку C:\Program Files\Apache Software Foundation omcat 7.0\lib. Выполнив эту программу с помощью Execute
Моя проблема была немного в другом.Вместо jdbc:oracle:thin:@server:port/service
у меня было это как server:port/service
.
Пропало было jdbc:oracle:thin:@
в url
атрибут в GlobalNamingResources.Resource.Но я упустил из виду исключение Tomcat
java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'
для этой ошибки:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
вам нужно:
Import java.sql.*;
Import com.mysql.jdbc.Driver;
даже если он не используется до запуска приложения.