Как установить драйвер JDBC в веб-проект Eclipse без обращения к java.lang.ClassNotFoundexception

Есть очень похожий вопрос для моего, но в моем случае у меня нет дубликатов банок в моем пути сборки, поэтому решение для меня не работает, Я искал 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-коннектор.
  • Поместите его в мою папку MySQL C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar.
  • Открыл свойства проекта в Eclipse.
  • Добавить внешнюю банку в мой путь сборки, и я выбрал mysql-connector-java-5.1.12-bin.jar.

Каждый раз, когда я пытаюсь использовать сервлет, я получаю ту же ошибку, независимо от того, есть ли у меня банка или нет. Не могли бы вы помочь мне понять это?

Ответ 1

Как для каждой библиотеки "сторонних разработчиков" в стиле JAR файла, который должен использоваться webapp, просто скопируйте/опустите файл физического JAR в webapp /WEB-INF/lib. Затем он будет доступен в classpath по умолчанию для webapp. Кроме того, Eclipse достаточно умен, чтобы заметить это. Не нужно беспокоиться о пути построения. Однако не забудьте удалить все ненужные ссылки, добавленные ранее, иначе они могут столкнуться.

Альтернативой является установка его на самом сервере путем удаления физического файла JAR в собственной папке /lib сервера. Это необходимо, когда вы используете источник данных пула соединений JDBC, предоставляемый сервером, который, в свою очередь, нуждается в драйвере JDBC MySQL.

См. также:

Ответ 2

Поскольку вы запускаете его в servlet, вам нужно, чтобы банка была доступна в контейнере сервлета. Вы либо включаете соединитель как часть вашего приложения war, либо помещаете его как часть расширенной библиотеки контейнера сервлетов и материала управления данными, если он есть. Вторая часть полностью зависит от контейнера, который у вас есть.

Ответ 3

Другие правы в том, чтобы сделать 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

На вашей платформе вам нужно использовать ; как разделитель путей, как обсуждалось здесь и здесь.

Ответ 4

Поместите mysql-connector-java-5.1.6-bin.jar в папку \Apache Tomcat 6.0.18\lib. Ваша проблема будет решена.

Ответ 5

Выполните следующие действия:

1) Установите eclipse
2) Импорт Apache для затмения
3) Установите mysql
4) Загрузите mysqlconnector/J
5) Разархивируйте zip файл, перемещаясь по нему, пока вы не получите файл bin. Затем поместите все файлы, которые присутствуют в папке, содержащей bin, в C:\Program Files\mysql\mysql server5.1/ затем укажите тот же путь, что и адрес при определении драйвера в затмении.

Это все очень простые парни.

Ответ 6

Что вам не следует делать (особенно при работе над общим проектом)

Хорошо, после такой же проблемы и после прочтения некоторых ответов здесь и в других местах. кажется, что ставить external lib в WEB-INF/lib не так уж хорошо, как его pollute webapp/JRE libs with server-specific libraries - для получения дополнительной информации проверьте этот ответ

Еще одно решение, которое я НЕ рекомендую: скопировать его в папку tomcat/lib. хотя это может работать, будет сложно управлять зависимостью для общего (git) проекта.

Хорошее решение 1

Создайте папку vendor. поставьте туда всю свою внешнюю библиотеку. затем сопоставьте эту папку как зависимость от вашего проекта. в eclipse вам нужно

  • добавьте свою папку в папку build path
    • Project PropertiesJava build path
    • Libraries → добавить внешнюю библиотеку или другое решение для добавления ваших файлов/папок
  • добавьте свой путь сборки к deployment Assembly (ссылка)
    • Project Propertiesdeployment Assembly
    • AddJava Build Path Entries
    • Теперь вы должны увидеть список библиотек на пути сборки, которые вы можете указать для включения в свою готовую WAR.
    • Выберите те, которые вы хотите, и нажмите "Готово".

Хорошее решение 2

Используйте maven (или любую альтернативу) для управления зависимостью проекта

Ответ 7

Если проблема все еще сохраняется,

mysql-connector-java-5.0.8-bin в месте внутри вашей папки Tomcat- > lib- > (независимо от того, где вы установили Tomcat). И измените свою экологическую переменную (Done, нажав "Свойства Mycomputer" - Расширенные настройки системы - Переменные окружения - И установите новое имя переменной и значения переменных как место, где находится ваш файл lib.Не забывайте вводить a; в конце пути )

Если проблема по-прежнему сохраняется Попробуйте загрузить commons-collections-2.0.jar(http://www.docjar.com/jar_detail/commons-collections-2.0.jar.html) и вставьте банку в том же месте, где находится ваш mysql jar (т.е.) внутри Tomcat Пб.

Очистите проект. Остановите свой сервер. Наконец попробуйте запустить.

Ответ 8

Много раз я сталкивался с этой проблемой, я испытал ClassNotFoundException. если банка не находится в физическом месте.

Поэтому убедитесь, что .jar файл (соединитель mysql) находится в физическом расположении папки WEB-INF lib. а также убедитесь, что перезагрузите Tomcat, используя команду shutdown в cmd. он должен работать.

Ответ 9

Единственное решение, с которым я работал, - это вставить файл .jar в WEB-INF/lib. Надеюсь, это поможет.

Ответ 10

Предполагая, что ваш проект основан на maven, добавьте его в свой POM:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>

Сохранить > Сборкa > и снова проверить подключение. Оно работает! Ваша фактическая версия соединителя java mysql может отличаться.

Ответ 11

Поместите mysql-connector-java-5.1.38-bin.jar в C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib folder.by, выполнив эту программу с выполнением

Ответ 12

Right click on the Project, go to Properties. 
Choose Deployment Assembly (if not found, read the update part) from the left pane. 
Check if Java Build Path Entries are provided. 
If not, click on Add and include it. If it is already present, click Add to include your connector jar as Archive. 
Do a Project>Clean, restart your Server.

Ответ 13

Моя проблема была немного другой. Вместо jdbc:oracle:thin:@server:port/service меня было это как server:port/service.

Отсутствовал атрибут jdbc:oracle:thin:@ in url в GlobalNamingResources.Resource. Но я упустил из виду исключение кота

java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'

Ответ 14

для этой ошибки:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

вам нужно:

Import java.sql.*;
Import com.mysql.jdbc.Driver;

даже если он не используется до запуска приложения.