Peeter Jalakas
Peeter Jalakas

Reputation: 7

Java connecting JDBC to Dynamic Web App

I have run into a problem that I have been trying to figure out for days:

I added my driver: mysql-connector-java-5.1.40.jar to build path. web-inf lib folder, apache tomcat lib folder. And also I have it in web app libaries.

However when I just run a main class and run it works, it is something to do with the web app?

This is my code:

This is the servlet class, that I use to connect to my database

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)
     */


}

this is the second class how i make connection

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;

        }

    }

}

And I get this error:

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 ?

Upvotes: 0

Views: 214

Answers (3)

N00b Pr0grammer
N00b Pr0grammer

Reputation: 4647

Adding the JAR file into your CLASSPATH (for compilation needs) / project's BUILDPATH and also under your project's WEB-INF/lib folder (for runtime references, i.e., when you deploy your application to an application server). For further reference, please go through this link

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

This is no longer required as per Official Java documentation here, but it is a mandatory step if you are using prior versions of JDBC 4.0.

This question can provide you lot many details on this regards.

Hope all these details help you resolve your issue!

Upvotes: 0

Coder ACJHP
Coder ACJHP

Reputation: 2214

You need 3 steps to solve your problem:

  1. Add this code before connection Class.forName("com.mysql.jdbc.Driver");
  2. Add 'JConnector.jar' into your project and build path.
  3. Don't try enter same person because there is error in stack trace "User all ready exist ".

Upvotes: 0

Guillaume F.
Guillaume F.

Reputation: 6473

Because the String "jdbc:mysql" doesn't declare the driver Class itself, but only the name registered by a potential driver. You have to force the JVM to load the Driver class with a :

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

before starting the JDBC connection.

Upvotes: 1

Related Questions