Драйвер не найден, исключение JDBC

Я получаю следующее исключение при подключении к базе данных из 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.

Но я понятия не имею, что не так с драйвером.

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

RSloeserwij 01.05.2018 11:47

Какую версию драйвера вы используете?

Magd Kudama 01.05.2018 11:48

«Однако соединение установлено ...» Нет, если у вас есть ClassCastException. Что заставляет вас думать, что у вас есть связь? Исключение должно остановить ваш код тут же, если только у вас нет catch(Exception ex) где-то высоко в вашем коде. Кроме того, вы должны получить что-то вроде «не найден подходящий драйвер для URL ...» вместо ClassCastException, что означает, что вы где-то делаете Class.forName("com.mysql.cj.jdbc.Driver"), который вам не нужен, начиная с Java 1.6.

SeverityOne 01.05.2018 12:29

Я попытался вставить в базу данных и распечатать то, что у меня есть в базе данных (проверено также с помощью db), поэтому я предположил, что, поскольку оба работают, соединение в порядке.

Diana G 01.05.2018 13:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
1 937
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, что ваше имя драйвера неверное Вот драйвер, который я использую, попробуйте

com.mysql.jdbc.Driver

также сделайте 'H' в нижнем регистре локального хоста

Если приведенное выше решение не работает:

1: удалить импорт com.mysql.cj.jdbc.* 2: Используйте этот драйвер private static final String DRIVER = "com.mysql.cj.jdbc.Driver";

В доменных именах, включая localhost, регистр не учитывается. Так что это не имеет к этому никакого отношения.

SeverityOne 01.05.2018 12:25

Да, вы были правы, у меня неверное имя драйвера, спасибо!

Diana G 01.05.2018 13:15

Проблема в том, что вы используете драйвер 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 и выше.

Другие вопросы по теме