Как установить драйвер JDBC в веб-проект Eclipse, не сталкиваясь с java.lang.ClassNotFoundexception - PullRequest
22 голосов
/ 01 марта 2010

Есть ОЧЕНЬ похожий вопрос к моему, но в моем случае у меня нет дубликатов 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..., и я не могу понять, почему! Вот что я сделал:

  1. Скачать mysql-разъем.
  2. Поместите его в мою папку MySQL C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar.
  3. Открыл свойства проекта в Eclipse.
  4. Добавьте External Jar к моему пути сборки, и я выбрал mysql-connector-java-5.1.12-bin.jar.

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

Ответы [ 13 ]

53 голосов
/ 01 марта 2010

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

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

Смотри также:

4 голосов
/ 01 марта 2010

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

3 голосов
/ 29 декабря 2010

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

3 голосов
/ 01 марта 2010

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

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

1 голос
/ 16 февраля 2015

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

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

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

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

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

  1. добавить вашу папку в build path
    1. Project Properties -> Java build path
    2. Libraries -> добавить внешнюю библиотеку или любое другое решение для добавления ваших файлов / папок
  2. добавьте ваш путь сборки к deployment Assembly ( ссылка )
    1. Project Properties -> Deployment Assembly
    2. Add -> Java Build Path Entries
    3. Теперь вы должны увидеть список библиотек в вашем пути сборки, который вы можете указать для включения в готовую WAR.
    4. Выберите те, которые вы хотите, и нажмите Finish.

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

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

1 голос
/ 10 марта 2012

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

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

Это все очень просто, ребята.

0 голосов
/ 09 января 2019

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

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

java.sql.SQLException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'server:port/service'
0 голосов
/ 15 марта 2016

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

0 голосов
/ 04 октября 2013

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

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

Сохранить> Построить> и снова протестировать соединение. Оно работает! Фактическая версия Java-коннектора mysql может отличаться.

0 голосов
/ 20 марта 2013

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

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

вам нужно:

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

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

...