Существует Очень похожий вопрос взорвать, но в моем случае у меня нет дублирующихся банок в моем пути сборки, таким образом, решение не работает на меня. Я искал 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.
");
Class.forName("com.mysql.jdbc.Driver").newInstance();
out.println("Get the connection.
");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret");
query = connection.prepareStatement( "SELECT * FROM customers");
//...
} catch (Exception e)
{
out.println(e.toString()+"
");
}
}
//...
Когда я выполняю вышеупомянутый код, я получаю следующий вывод:
Create the driver instance.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Это не заканчивает Class.forName...
строка и я не можем выяснить почему! Вот то, что я сделал:
C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar
. mysql-connector-java-5.1.12-bin.jar
.Каждый раз, когда я пытаюсь использовать сервлет, я получаю ту же ошибку независимо, если у меня есть банка там или если я не делаю. Вы могли помочь мне понять это?
Что касается каждой «сторонней» библиотеки в виде JAR-файла, который должен использоваться веб-приложением, просто скопируйте / удалите физический JAR-файл в веб-приложении / WEB-INF / lib
. Затем он будет доступен в пути к классам по умолчанию webapp. Кроме того, Eclipse достаточно умен, чтобы это заметить. Не нужно возиться с путём сборки. Однако не забудьте удалить все ненужные ссылки, которые вы добавили ранее, иначе они могут столкнуться.
Альтернативой является установка его на самом сервере путем удаления физического JAR-файла в собственную папку сервера / lib
. Это необходимо, когда вы используете предоставленный сервером источник данных пула соединений JDBC, которому, в свою очередь, нужен драйвер MySQL JDBC.
Остальные правы в том, что делает 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
На вашей платформе вам понадобится использовать ;
в качестве разделителя путей, как описано здесь и здесь .
Поскольку вы запускаете его в сервлете
, вам необходимо, чтобы jar был доступен для контейнера сервлета . Вы либо включаете коннектор как часть своего приложения war
, либо помещаете его как часть расширенной библиотеки контейнера сервлетов и средств управления источниками данных, если они есть. Вторая часть полностью зависит от контейнера, который у вас есть.