如何将JDBC驱动程序导入Dynamic Web Project?

gil*_*iev 2 java mysql tomcat servlets jdbc

我有一个本地MySQL数据库.当我创建一个简单的Java项目,其中一个类只包含main时,我使用JDBC连接器jar成功从数据库中检索了一些数据,使用Build path - > Add external jars导入,它完美地工作.

然后我尝试使用类似的方法,但现在在动态Web项目中,我使用Servlets,但是我得到了java.sql.SQLException:没有为jdbc找到合适的驱动程序:mysql:// localhost/ePay.

我一直在寻找几个小时的类似问题的答案,这是我到目前为止尝试放置JDBC MySQL连接器的地方:

  1. 直接进入Java Resources文件夹
  2. 进入Java资源库中的lib文件夹
  3. 进入WebContent/WEB-INF/lib /

我需要web.xml或context.xml吗?我阅读了一个使用它们的教程,尝试实现解释的示例,但我仍然遇到了同样的问题.

我正在使用Linux Mint 17,将Tomcat 7用于Eclipse IDE.

这是我的项目结构的照片:

在此输入图像描述

以下是相关课程:

package dbObjects;

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

public class Entity {
    protected Connection getConnection() throws SQLException {
        String pass = "mypass";
        String userDB = "root";
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost/ePay", userDB, pass);
        return conn;
    }

    protected ResultSet getResultSet(String sql) throws SQLException {
        Connection conn = getConnection();
        Statement st = conn.createStatement();
        return st.executeQuery(sql);
    }
}
Run Code Online (Sandbox Code Playgroud)

用户类:

package dbObjects;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

public class User extends Entity {
    private long idUser;
    private String userName;
    private String pass;
    private String fullName;
    private String email;
    private Date dateOfBirth;
    private String address;

    public User(long idUser, String userName, String pass, String fullName,
            String email, Date dateOfBirth, String address) {
        super();
        this.idUser = idUser;
        this.userName = userName;
        this.pass = pass;
        this.fullName = fullName;
        this.email = email;
        this.dateOfBirth = dateOfBirth;
        this.address = address;
    }

    public User(long idUser) throws SQLException {
        super();
        this.idUser = idUser;
        setUserById(idUser);
    }

    private void setUserById(long idUser) throws SQLException {
        ResultSet resultSet = getResultSet("SELECT * FROM User WHERE idUser = " + idUser);
        while(resultSet.next()) {
            System.out.println(resultSet.getInt("idUser"));
            userName = resultSet.getString("username");
            pass = resultSet.getString("pass");
            fullName = resultSet.getString("fullname");
            email = resultSet.getString("email");
            dateOfBirth = resultSet.getDate("dateOfBirth");
            address = resultSet.getString("address");
        }
    }

    @Override
    public String toString() {
        return userName;
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行的servlet:

package servlets;

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

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

import dbObjects.User;

/**
 * Servlet implementation class HomeServlet
 */
@WebServlet(description = "Home page shown to user", urlPatterns = { "/HomeServlet" })
public class HomeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HomeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        User user = null;
        try {
            user = new User(1);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        PrintWriter pw = response.getWriter();
        pw.println(user);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}
Run Code Online (Sandbox Code Playgroud)

Rob*_*res 6

有两种方法可以在eclipse项目中使用和引用jar文件.

  • 一个是在编译时和编译目的.要使项目编译,需要在类路径中添加所需的库.在eclipse中,右键单击您的项目,将鼠标悬停在"Build Path"上,然后选择"Configure Build Path".在对话框中,转到"库"选项卡,在那里您可以看到您拥有的罐子/库.如果需要添加更多,可以使用对话框右侧的按钮.在那里,您应该选择"添加外部jar"并从文件系统中选择MySql JDBC Driver.

  • 另一个是在运行时.这是将Web应用程序部署到应用程序服务器时的情况.现在,每当您的应用程序需要从外部jar加载类时,它将在应用程序服务器的类加载器中查找jar.类加载器包含应用程序服务器中可用jar文件的路径,配置的资源以及WEB-INF/lib /文件夹中的已部署应用程序.您可以配置类加载器首先检查的位置.

在您的特定情况下,您需要在任何类加载器路径中添加MySQL JDBC驱动程序(因为我认为您的项目已经编译),因此您可以将jar添加到Tomcat的/ lib目录或应用程序的/ WEB-INF/lib/目录.之后只需重新部署或重新启动tomcat,您就应该可以使用MySQL JDBC连接.

更新:

此外,在使用DriverManager接口创建JDBC连接时,请记住始终首先创建JDBC驱动程序的实例,以便将其加载到类加载器中.您可以在MySQL JDBC Driver文档中看到这一点.EJ:

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

在使用之前调用此行DriverManager.getConnection(...),您现在应该能够创建和使用JDBC Connections.