Я получаю следующее исключение при подключении к базе данных из eclipse.
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at connection.ConnectionFactory.<init>(ConnectionFactory.java:29)
at connection.ConnectionFactory.<clinit>(ConnectionFactory.java:25)
at dao.StudentDAO.insert(StudentDAO.java:53)
at bll.StudentBLL.insertStudent(StudentBLL.java:39)
at start.Start.main(Start.java:23)
Однако соединение установлено, я могу читать из базы данных, могу писать в нее, но исключение не исчезает. Я добавил mysql-connector-java-5.1.45-bin в файл пути с путем сборки и появился в разделе библиотеки. Я считаю, что URL-адрес, пользователь и пароль написаны правильно, так как я могу писать в БД. Связь устанавливается:
try {
connection = DriverManager.getConnection("jdbc:mysql://localHost:3306/schooldb","root","");
} catch (SQLException e) {
LOGGER.log(Level.WARNING, "An error occured while trying to connect to the database");
e.printStackTrace();
}
return connection;
}
Код для драйвера:
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Я работаю с eclipse Oxygen в проекте Maven. База данных создается с помощью MYSQLWorkbench 6.0CE.
Но я понятия не имею, что не так с драйвером.
Какую версию драйвера вы используете?
«Однако соединение установлено ...» Нет, если у вас есть ClassCastException
. Что заставляет вас думать, что у вас есть связь? Исключение должно остановить ваш код тут же, если только у вас нет catch(Exception ex)
где-то высоко в вашем коде. Кроме того, вы должны получить что-то вроде «не найден подходящий драйвер для URL ...» вместо ClassCastException
, что означает, что вы где-то делаете Class.forName("com.mysql.cj.jdbc.Driver")
, который вам не нужен, начиная с Java 1.6.
Я попытался вставить в базу данных и распечатать то, что у меня есть в базе данных (проверено также с помощью db), поэтому я предположил, что, поскольку оба работают, соединение в порядке.
Я думаю, что ваше имя драйвера неверное Вот драйвер, который я использую, попробуйте
com.mysql.jdbc.Driver
также сделайте 'H' в нижнем регистре локального хоста
Если приведенное выше решение не работает:
1: удалить импорт com.mysql.cj.jdbc.*
2: Используйте этот драйвер private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
В доменных именах, включая localhost
, регистр не учитывается. Так что это не имеет к этому никакого отношения.
Да, вы были правы, у меня неверное имя драйвера, спасибо!
Проблема в том, что вы используете драйвер MySQL Connector / J 5.1.45, который использует имя класса драйвера com.mysql.jdbc.Driver
, но пытаетесь загрузить имя класса драйвера, представленное в новом драйвере MySQL Connector / J 8.x.
Либо обновитесь до MySQL Connector / J 8.0.11 (доступно на https://dev.mysql.com/downloads/connector/j/), либо - если вы хотите продолжать использовать 5.1.45 сейчас - используйте
private static final String DRIVER = "com.mysql.jdbc.Driver";
Кроме того, для обратной совместимости MySQL Connector / J 8.x также сохраняет вышеуказанный класс для загрузки.
Технически загрузка такого драйвера даже не требуется во многих ситуациях из-за автоматической загрузки драйвера JDBC 4 и выше.
localhost пишется с заглавной буквы H в строке подключения, может ли это быть проблемой? также не уверен, принимает ли jdbc пустую строку для пароля