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

时间:2015-05-21 21:15:39

标签: java mysql tomcat servlets jdbc

我有一个本地MySQL数据库。当我创建一个简单的Java项目时,只有一个类只包含main,我使用JDBC连接器jar成功从数据库中检索了一些数据,使用Build path导入 - >添加外部罐子,效果很好。

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

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

  1. 直接进入Java Resources文件夹
  2. 进入Java资源中的lib文件夹
  3. 进入WebContent / WEB-INF / lib /
  4. 我需要web.xml或context.xml吗?我阅读了一个使用它们的教程,试图实现解释的例子,但我仍然遇到了同样的问题。

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

    以下是我项目结构的照片:

    enter image description here

    以下是相关课程:

    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);
        }
    }
    

    用户类:

    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;
        }
    
    }
    

    我正在尝试运行的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
        }
    
    }
    

3 个答案:

答案 0 :(得分:6)

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

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

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

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

<强>更新

此外,当使用DriverManager接口创建JDBC连接时,请记住始终首先创建JDBC驱动程序的实例,以便将其加载到类加载器中。您可以在the MySQL JDBC Driver documentation中看到此信息。 EJ:

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

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

答案 1 :(得分:1)

你的mysql jdbc驱动程序应放在tomcat的目录中:

  

CATALINA_BASE / web应用/ APP_NAME / WEB-INF / LIB /

确保在将新的mysql jdbc驱动程序jar文件放在那里后启动/重新启动服务器。

答案 2 :(得分:-1)

将驱动程序jar文件放入WEB-INF / lib文件夹。