ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql – 连接到DB时Tomcat找不到JDBC驱动程序

2019-06-23 15:03:30  阅读:282  来源: 互联网

标签:mysql servlets tomcat8


参见英文答案 > jdbc to MYSQL error: No suitable driver found for jdbc:mysql://localhost:3306/test?user=’root’&password=”                                     1个
我把mysql驱动程序放在… / ROOT / WEB-INF / lib和Tomcat 8.0 / lib中,但它没有效果.我正在使用以下类连接到DB:

package db;

import java.sql.*;

public class ConnectToDB implements AutoCloseable {
    Connection con;

    public ConnectToDB(String server, String database, String user,
            String password) throws SQLException {
        con = DriverManager.getConnection("jdbc:mysql://" + server + "/"
                + database, user, password);
    }

    @Override
    public void close() throws SQLException {
        con.close();
    }

    public Connection getConnection() {
        return con;
    }

}

Eclipse项目中包含以下类:

1. src / nr3 / model

package nr3.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import db.ConnectToDB;
public class MusikkHandler {
    private ConnectToDB db;
    private Connection con;
    private String tableName;
    private PreparedStatement pstmtGetRows;

    public MusikkHandler(String server, String database, String user,
            String password) throws SQLException {
        db = new ConnectToDB(server, database, user, password);
        con = db.getConnection();
        tableName = "album";
    }

    public void close() throws SQLException {
        db.close();
    }

    public ArrayList<Album> getRows(String genre) throws SQLException {
        ArrayList<Album> list = new ArrayList<Album>();
        pstmtGetRows = con.prepareStatement("SELECT * FROM " + tableName
                + " WHERE SJANGER = ?");
        pstmtGetRows.setString(1, genre);
        ResultSet rs = pstmtGetRows.executeQuery();
        while (rs.next()) {
            list.add(new Album(rs.getString(1), rs.getString(2), rs.getInt(3),
                    rs.getInt(4), rs.getString(5)));
        }
        rs.close();
        pstmtGetRows.close();
        return list;
    }
}

package nr3.model;

public class Album {
    private String tittel;
    private String artist;
    private int spor;
    private int utgitt;
    private String sjanger;

    public Album (String artist, String tittel, int spor, int utgitt, String sjanger){
        setArtist(artist);
        setTittel(tittel);
        setUtgitt(utgitt);
        setSpor(spor);
        setSjanger(sjanger);
    }
    public Album(){
        this(null, null, 0, 0, null);
    }
    public void setTittel(String tittel){
        this.tittel = tittel;
    }
    public void setArtist(String artist){
        this.artist = artist;
    }
    public void setSpor(int spor) {
        this.spor = spor;
    }
    public void setUtgitt(int utgitt) {
        this.utgitt = utgitt;
    }
    public void setSjanger(String sjanger) {
        this.sjanger = sjanger;
    }
    public String getTittel() {
        return tittel;
    }
    public String getArtist() {
        return artist;
    }
    public int getSpor() {
        return spor;
    }
    public int getUtgitt() {
        return utgitt;
    }
    public String getSjanger() {
        return sjanger;
    }
    public String toString(){
        return getTittel() + " (" + getArtist() + ")" + " Utgitt: " 
                                               + getUtgitt(); 
    }
}

2. src / nr3 / servlets

package nr3.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import nr3.model.Album;
import nr3.model.MusikkHandler;

public class MusikkValg extends HttpServlet {

    private static final long serialVersionUID = 428937262021570370L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String genre = request.getParameter("sjanger");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        MusikkHandler mh;

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Musikk</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>MUSIKK-ANBEFALINGER</h1>");
        out.println("<br/>");
        out.println("<br/>");
        out.println("<h3>Da bør du kanskje forsøke en av disse:</h3>");
        out.println("<br/>");
        out.println("<br/>");
        try {
            mh = new MusikkHandler(" ", " ", " ", " ");
            for (Album a : mh.getRows(genre))
                out.println("<p>" + a + "</p>");
        } catch (SQLException e) {
            e.printStackTrace(out);
        }
        out.println("</body>");
        out.println("</html>");
    }

}

更新:我在浏览器中遇到以下错误堆栈跟踪:

java.sql.SQLException: No suitable driver found for
jdbc:mysql://localhost/pg3100 at
java.sql.DriverManager.getConnection(Unknown Source) at
java.sql.DriverManager.getConnection(Unknown Source) at
db.ConnectToDB.(ConnectToDB.java:10) at
nr3.model.MusikkHandler.(MusikkHandler.java:20) at
nr3.servlets.MusikkValg.doGet(MusikkValg.java:39) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:618) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
at
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2381)
at
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2370)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

解决方法:

首先,您必须在开始时注册您的驱动程序,以便DriverManager在获得连接时可以使用它. It might vary就实施了.

DriverManager.registerDriver (new com.mysql.jdbc.Driver());

要么

Class.forName("com.mysql.jdbc.Driver"); 

然后,您可以执行getConnection(),因为您将注册一个DriverManager使用的驱动程序.

第二:/ webapps / ROOT / WEB-INF / lib是一个不同的上下文,除非你设置应用程序as shown in this question的上下文路径,否则它的库将无法用于你的应用程序.如果你想添加它,请尝试放置你的JDBC驱动程序首先在/ webapps /< yourapp> / lib上. Tomcat lib也可以正常工作(但是当你分发应用程序时,它可能与部署在那里的其他应用程序冲突,使用不同版本的驱动程序等)

第三:在这里提问时,尽量将可验证的例子减少到可读的范围.有很多代码与您的问题无关.减少使您更容易阅读您的问题并提供帮助.

标签:mysql,servlets,tomcat8
来源: https://codeday.me/bug/20190623/1271549.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有