服务器出现java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb2的问题

1.发现问题

1.1出现java.sql.SQLException等问题

废话不多说直接上图

 java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb2
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:703)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
	at xiaoge.DemoServlet.doPost(DemoServlet.java:26)
	at xiaoge.DemoServlet.doGet(DemoServlet.java:38)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
23-Mar-2020 23:16:26.984 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [G:\Tomcat8\apache-tomcat-8.5.51-windows-x64\apache-tomcat-8.5.51\webapps\manager]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:844)

先看看我的代码

package xiaoge;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Created by Administrator on 2020/3/23 22:11
 * @author Administrator
 */
public class DemoServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String url = getServletConfig().getInitParameter("url");
        String username = getServletConfig().getInitParameter("username");
        String password = getServletConfig().getInitParameter("password");
        String driver = getServletConfig().getInitParameter("driver");
        try {
            Connection connection = DriverManager.getConnection(url,username,password);
        } catch (SQLException  e) {
            e.printStackTrace();
        }finally {
            {

            }
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

首先我是想使用最基础的web.xml来温习一下不使用框架自己写配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>testServlet</servlet-name>
        <servlet-class>xiaoge.DemoServlet</servlet-class>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/mydb2</param-value>
        </init-param>
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>1234</param-value>
        </init-param>
        <init-param>
            <param-name>driver</param-name>
            <param-value>com.jdbc.mysql.Driver</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>testServlet</servlet-name>
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>
</web-app>

(配置文件是没有问题的)
但是为什么会出现上述的问题呢,我也思考了好久终结了下面几种的情况

我在创建这个Servlet连接数据库时出现了几个问题(我开始搞不明白):

1.为什么在测试类中创建一个连接数据库时,不用写数据库驱动就可以连接,而在Servlet服务器不行?

测试类(非服务器)Test连接数据库

package xiaoge;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * Created by Administrator on 2020/3/23 22:59
 */
public class Test {
    public static void main(String[] args) {
        try {
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb2","root","1234");
            System.out.println(connection);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

Servlet服务器类

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String url = getServletConfig().getInitParameter("url");
        String username = getServletConfig().getInitParameter("username");
        String password = getServletConfig().getInitParameter("password");
        String driver = getServletConfig().getInitParameter("driver");
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url,username,password);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            {

            }
        }
    }

2.为什么连接数据库的jar包导在所有的类中,Servlet识别不了?非要你在WEB-INF下创建一个lib目录放进去连接jar包?(`所谓配置好了是,你能在测试类中可以连接数据库,而在服务器端连不上
解决方法就是下图
在这里插入图片描述

2.归根结底能让一个Servlet连接数据库就是

2.1配置web.xml;(或者使用注解的方式)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>testServlet</servlet-name>
        <servlet-class>xiaoge.DemoServlet</servlet-class>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/mydb2</param-value>
        </init-param>
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>1234</param-value>
        </init-param>
        <init-param>
            <param-name>driver</param-name>
            <param-value>com.jdbc.mysql.Driver</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>testServlet</servlet-name>
        <url-pattern>/demo01</url-pattern>
    </servlet-mapping>
</web-app>

在这里插入图片描述

2.2创建Servlet服务器对象

在这里插入图片描述

2.3在服务器对象的WEB-INF—lib—mysql.jdbc.×××(选择你数据库相对对应的版本);

在这里插入图片描述

2.4规范你的连接数据步骤,定不要忘记了写创建驱动的代码,否则Servlet会识别不了连接数据库的代码

代码是:

Class.forname("com.jdbc.mysql.Driver");
这个放在要连接的数据库connnerction 对象的前面;

发布了12 篇原创文章 · 获赞 2 · 访问量 199

猜你喜欢

转载自blog.csdn.net/weixin_44954070/article/details/105060853