【问题标题】:No suitable driver found for jdbc:mysql://localhost/database找不到适合 jdbc:mysql://localhost/database 的驱动程序
【发布时间】:2018-12-13 13:16:50
【问题描述】:

我问同样的问题,因为我没有找到答案。这是我的问题。 我一直在尝试使用 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();
        }

    }
}

但是,当我尝试在我的 servlet 类中使用它时,我收到一条错误消息:
没有找到适合 jdbc:mysql://localhost/name_of_my_database 的驱动程序
我检查了上一个问题的答案,说这是由两件事引起的:

  1. 错误的网址,我检查了,没问题。(jdbc:mysql://localhost:3306/app1)
  2. 我没有添加jar文件 在tomcat的lib文件夹中,我做了,但我还是一样 错误。(截图:https://prnt.sc/k2qlxahttps://prnt.sc/k2qm1e,http://prntscr.com/k2qm5h
    此外,我将此 jar 文件添加到 WEB-INF/lib 文件夹中,这也不起作用。
    还有什么我可以尝试的吗?请帮我理解这里的问题,因为我无法解决这个问题......

这是我的 servlet 类:

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 进行项目开发。例如:日食。创建一个 Web 项目。 IDE 将生成一个项目文件夹结构。在它们下你可以找到一个lib 文件夹。将您的驱动程序 jar 文件保存在该文件夹中,然后运行您的项目。
  • 您必须强制类加载器加载驱动程序。按照@Rugved 的指示去做。
  • @Antoniossss 不,你没有。 5 年多来你不需要这样做。为什么人们坚持过时的“要求”?
  • 我认为,我的项目结构非常合适。这是截图。我将尝试使用 eclipse。prntscr.com/k2qx0j

标签: java mysql jdbc


【解决方案1】:

你试过用这条线吗?

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) 过时的。好几年了,我们不必明确地注册司机。
  • 您的意思是对于较新版本的 java 不需要它?
  • JDBC 4 于 2011 年与 Java 7 一起发布,距今已有 7 年多了;从那以后,这不是必需的。
  • @BoristheSpider 感谢您提供此信息。
【解决方案2】:

为我解决这个问题的唯一方法是使用 Class.forName

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

当然,这应该在 1923 年就变得多余了,但是几乎到处都放置了 mysql-connector jar 文件,这是唯一有效的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2014-08-05
    • 2019-10-16
    • 2016-10-01
    • 2012-05-08
    • 2017-08-26
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多