【问题标题】:Java connecting JDBC to Dynamic Web AppJava 将 JDBC 连接到动态 Web 应用程序
【发布时间】:2017-03-17 15:55:48
【问题描述】:

我遇到了一个几天来一直试图解决的问题:

我添加了我的驱动程序:mysql-connector-java-5.1.40.jar 来构建路径。 web-inf lib 文件夹,apache tomcat lib 文件夹。而且我在网络应用程序库中也有它。

但是,当我只运行一个主类并运行它时,它与网络应用程序有关吗?

这是我的代码:

这是我用来连接数据库的 servlet 类

package sql;

import java.io.IOException;
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;

/**
 * Servlet implementation class RegisterServlet
 */
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private DbUtil sql = new DbUtil();

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

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String email = request.getParameter("email");

        String username = request.getParameter("username");

        String password = request.getParameter("password");


        if (sql.addToAccountToDatabase(username, password, email)) {



            System.out.println("Gongratz");

        } else {

            System.out.println("mhhh ?");
        }








    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */


}

这是我如何建立联系的第二课

package sql;

import java.sql.*;

public class DbUtil {

    public Connection getConnection() {

        Connection connect = null;

        try {

            String url = "jdbc:mysql://hidden:3306/hidden";

            connect = DriverManager.getConnection(url, "hidden", "hidden");
            return connect;

        } catch (Exception e) {

            System.out.println("Cannot connect to database");
            e.printStackTrace();

        }

        return connect;

    }

    public boolean addToAccountToDatabase(String username, String password, String email) {

        try {

            String query = "INSERT INTO Account (username, password, email) VALUES (?, ?,?)";
            PreparedStatement pStat = getConnection().prepareStatement(query);
            pStat.setString(1, username);
            pStat.setString(2, password);
            pStat.setString(3, email);
            pStat.executeUpdate();
            return true;

        } catch (Exception e) {

            System.out.println("User already exists");

            e.printStackTrace();
            return false;

        }

    }

}

我得到这个错误:

Cannot connect to database
java.sql.SQLException: No suitable driver found for jdbc:mysql://192.185.227.214:3306/ratekas9_illegalminds
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at sql.DbUtil.getConnection(DbUtil.java:15)
    at sql.DbUtil.addToAccountToDatabase(DbUtil.java:34)
    at sql.RegisterServlet.doPost(RegisterServlet.java:40)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    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)
User already exists
java.lang.NullPointerException
    at sql.DbUtil.addToAccountToDatabase(DbUtil.java:34)
    at sql.RegisterServlet.doPost(RegisterServlet.java:40)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    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)
mhhh ?

【问题讨论】:

标签: java jdbc


【解决方案1】:

将 JAR 文件添加到您的 CLASSPATH(用于编译需要)/项目的 BUILDPATH 以及项目的 WEB-INF/lib 文件夹下(用于运行时引用,即,当您将应用程序部署到应用程序服务器时)。如需进一步参考,请通过此link

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

根据官方 Java 文档 here,这不再需要,但如果您使用的是 JDBC 4.0 的早期版本,则这是一个强制性步骤。

This question 可以为您提供很多关于这方面的详细信息。

希望所有这些细节能帮助您解决问题!

【讨论】:

  • 如果驱动程序是已部署应用程序的一部分,而不是 Tomcat 系统类路径,则还需要使用 Class.forName
【解决方案2】:

您需要 3 个步骤来解决您的问题:

  1. 在连接前添加此代码Class.forName("com.mysql.jdbc.Driver");
  2. 将“JConnector.jar”添加到您的项目和构建路径中。
  3. 不要尝试输入同一个人,因为堆栈跟踪“用户已准备就绪”存在错误。

【讨论】:

    【解决方案3】:

    因为字符串“jdbc:mysql”没有声明驱动程序类本身,而只是潜在驱动程序注册的名称。您必须强制 JVM 加载 Driver 类:

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

    在启动 JDBC 连接之前。

    【讨论】:

    • 在这种情况下确实如此,因为 MySQL Connector/J 是已部署应用程序的一部分,而不是整个 Tomcat,但通常不再需要使用 Class.forName 加载驱动程序.
    猜你喜欢
    • 2019-08-04
    • 2014-03-31
    • 2010-09-07
    • 2014-05-24
    • 1970-01-01
    • 2016-09-21
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多