Не найдено подходящего драйвера для jdbc: mysql: // localhost / database

Я задаю тот же вопрос, потому что не нашел ответа. Вот моя проблема. Я пытался использовать драйвер jdbc для подключения к базе данных mysql. Вот мой основной класс обработчика sql:

package com.arslanjava.model;

import java.sql.*;

public class SqlHandler {
    private Connection myConnection;
   // final private String serverName = "localhost" ;
    //final private String port = "3306" ;
    //final private String user = "root" ;
   // final private String password = "password" ;

    public SqlHandler ( String username , String password , String fname , String lName ) throws SQLException {
        if ( username != null  && password != null && fname != null && lName != null ) {

            //Establish connection to the server.
            this.establishConnection();

            //execute the addUser method
            this.addUser(username,password,fname,lName);

            //close this connection
            this.close();


        } else {
            throw new NullPointerException () ;
        }
    }


    public SqlHandler()  {

    }

    public void addUser (String us , String pas , String fName , String lName ) throws SQLException {
        PreparedStatement statement = myConnection.prepareStatement("INSERT INTO user_info (username, password, first_name, last_name) VALUES (?,?,?,?)");
        statement.setString(1,us);
        statement.setString(2,pas);
        statement.setString(3,fName);
        statement.setString(4,lName);
        statement.executeUpdate();
    }

    public void establishConnection () throws SQLException {
        myConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/app1","root","password") ; ;
    }

    public void close() {
        if (myConnection != null) {
            try {
                myConnection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

Все работает нормально, когда я использую его в простом java-коде, например, это отлично работает:

package com.arslanjava.model;

import com.arslanjava.model.SqlHandler;

import java.io.IOException;
import java.net.ServerSocket;
import java.sql.SQLException;

public class Test {
    public static void main(String[] args) {
        SqlHandler handler = new SqlHandler() ;
        try {
            handler.establishConnection();
            handler.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

Но когда я пытаюсь использовать его в своих классах сервлетов, я получаю сообщение об ошибке:
Не найдено подходящего драйвера для jdbc: mysql: // localhost / name_of_my_database.
Я проверил ответ в предыдущем вопросе, там говорилось, что это было вызвано двумя причинами:

  1. Неверный URL-адрес, который я проверил, и все было в порядке. (Jdbc: mysql: // localhost: 3306 / app1)
  2. Я не добавлял файл jar в папке lib tomcat, что я и сделал, но я все равно получаю то же самое ошибка. (скриншоты: https://prnt.sc/k2qlxa, https://prnt.sc/k2qm1e,http://prntscr.com/k2qm5h)
    Также я добавил этот jar-файл в папку WEB-INF / lib, что тоже не сработало. Есть ли что-нибудь еще, что я могу попробовать? Пожалуйста, помогите мне разобраться в проблеме, потому что я не могу это исправить ...

Вот мой класс сервлета:

package com.arslanjava.web;

import com.arslanjava.model.SqlHandler;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.SQLException;

public class MyRegServlet extends HttpServlet {

    @Override
    public void doPost (HttpServletRequest request , HttpServletResponse response) {
        String username = request.getParameter("us") ;
        String password = request.getParameter("psw") ;
        String first_name = request.getParameter("fname");
        String last_name = request.getParameter("lname") ;
        try {
            SqlHandler handler = new SqlHandler(username,password,first_name,last_name) ;
        } catch (SQLException e) {
            request.setAttribute("errorCode","5xx");
            request.setAttribute("errorMessage",e.toString());
            e.printStackTrace();
            RequestDispatcher dispatcher = request.getRequestDispatcher("customErroPage.jsp") ;
            try {
                dispatcher.forward(request,response);
            } catch (ServletException | IOException e1) {
                e1.printStackTrace();
            }
        }
    }

}

используйте подходящую IDE для разработки проекта. пример: Eclipse. Создайте веб-проект. и IDE сгенерирует структуру папок проекта. Под ними вы можете найти папку lib. Сохраните jar-файл драйвера в этой папке, а затем запустите свой проект.

Ravinder Reddy 05.07.2018 08:57

Вы должны заставить загрузчик классов загрузить драйвер. Сделайте так, как сказал @Rugved.

Antoniossss 05.07.2018 08:59

@Antoniossss, нет. Вам не нужно было этого делать более 5 лет. Почему люди настаивают на устаревших «требованиях»?

Boris the Spider 05.07.2018 09:03

Думаю, у меня достаточно хорошая структура проекта, вот скриншот, попробую использовать eclipse.prntscr.com/k2qx0j

Barracuda 05.07.2018 09:07

@BoristheSpider полезно знать. Более 6 лет я не использую низкоуровневые соединения jdbc, поэтому я действительно могу быть устаревшим.

Antoniossss 05.07.2018 09:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
6 707
2

Ответы 2

Вы пробовали использовать эту строчку?

Class.forName("com.mysql.jdbc.Driver");// include this line in your code.

Если нет, попробуйте добавить эту строку в эту функцию.

public void establishConnection() throws SQLException {
   myConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/app1","root","password");
}

Это предположение 1) спекулятивно 2) датировано. Уже несколько лет нам не нужно явно регистрировать драйверы.

Boris the Spider 05.07.2018 08:58

Вы имели в виду, что для более новой версии java это не нужно?

Rugved Marathe 05.07.2018 09:04

JDBC 4 был выпущен вместе с Java 7 в 2011 году, более 7 лет назад; с той даты в этом не было необходимости.

Boris the Spider 05.07.2018 09:05

@BoristheSpider Спасибо за эту информацию.

Rugved Marathe 05.07.2018 09:07

Единственное, что решило это для меня, - это использование Class.forName

try {
    Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

Конечно, это должно было стать избыточным еще в 1923 году, но если поместить файл jar mysql-connector практически повсюду, это единственное, что сработало.

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