0

I have a DatabaseConnectionOpen.java class as follows :

package db;

import java.sql.*;
public class DatabaseConnectionOpen {

static String dbHost = "jdbc:mysql://localhost:3306/javaweb?useSSL=false";
static String dbUsername = "user";
static String dbPassword = "user";

static Connection myConn = null;
static Statement myStmt = null;
static ResultSet myRes = null;

public void openConnection(){
    try {
        myConn = DriverManager.getConnection(dbHost, dbUsername, dbPassword);
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
}
public ResultSet runQuery(String query){
    try{
        myStmt = myConn.createStatement();
        myRes = myStmt.executeQuery(query);
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    finally {
        return myRes;
    }
}
public void closeConnection(){
    try {
        if (myRes != null) myRes.close();
        if (myStmt != null) myStmt.close();
        if (myConn != null) myConn.close();
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
}
}

It works fine when I use it from a class named ViewUsers.java whose code is as follows :

package dbImplement;

import db.DatabaseConnectionOpen;

import java.sql.ResultSet;
import java.sql.SQLException;

public class ViewUsers {

public static void main(String[] args) {

    ResultSet myRes = null;

    DatabaseConnectionOpen dbObject = new DatabaseConnectionOpen();

    dbObject.openConnection();

    try {
        myRes = dbObject.runQuery("SELECT * FROM users");
        while (myRes.next()) {
            System.out.println(myRes.getString("fname") + " " + myRes.getString("lname"));
        }
        myRes = dbObject.runQuery("SELECT * FROM users");
        while (myRes.next()) {
            System.out.println(myRes.getString("fname"));
        }
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    finally {
        dbObject.closeConnection();
    }

    dbObject.closeConnection();

}
}

But the problem occurs when I want to use DatabaseConnectionOpen.java from a servlet , code as follows :

package servlets;

import db.DatabaseConnectionOpen;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;

@WebServlet(name = "FirstServlet", urlPatterns = {"/msg"})

public class FirstServlet extends HttpServlet {

protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    ResultSet myRes = null;
    DatabaseConnectionOpen dbObject = new DatabaseConnectionOpen();
    dbObject.openConnection();
    out.println("<h1>Hello Sevlet</h1>");

    try {
        myRes = dbObject.runQuery("SELECT * FROM users");
        while (myRes.next()) {
            out.println("<h3>"+myRes.getString("fname") + " " + myRes.getString("lname")+"</h3>");
        }
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    finally {
        dbObject.closeConnection();
    }

    dbObject.closeConnection();

}
}

It only prints "Hello Servlet" but not the h3 part, and says :

> java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/javaweb?useSSL=false
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at db.DatabaseConnectionOpen.runQuery(DatabaseConnectionOpen.java:28)
    at servlets.FirstServlet.doGet(FirstServlet.java:30)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Feb 16, 2017 2:14:30 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /opt/tomcat/webapps/manager
Feb 16, 2017 2:14:30 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /opt/tomcat/webapps/manager has finished in 100 ms

It say no driver found but i have the external libraries of mysql connector and my other class(ViewUsers.java) works fine at the same time but not the Servlet.

Dipsraj
  • 15
  • 6
  • Can you try putting this into the constructor of your Servlet? `Class.forName("com.mysql.jdbc.Driver"); ` This will instantiate a new instance of the MySQL Driver. In addition, if the driver is not actually on your classpath, this will throw an Exception. – Matt Clark Feb 15 '17 at 21:23
  • Tried it , but doesn't work either. Same error – Dipsraj Feb 15 '17 at 21:24
  • is the driver jar under `WEB-INF/lib` dir? – ZhongYu Feb 15 '17 at 21:26
  • No it is directly under `ProjectFolder/lib` @ZhongYu – Dipsraj Feb 15 '17 at 21:28
  • @MattClark I tried what you said, but its showing error as follows : `javax.servlet.ServletException: Error instantiating servlet class servlets.FirstServlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)` – Dipsraj Feb 15 '17 at 21:35
  • Tomcat doesn't know your project folder:) Put the libs under WEB-INF/lib – ZhongYu Feb 15 '17 at 21:40
  • @ZhongYu didn't work either. I did not have lib folder under WEB-INF, so i created one and pasted the jar of mysql connector there... is this process ok ? If not please suggest – Dipsraj Feb 15 '17 at 22:04
  • copied the jar to `/opt/tomcat/webapps/manager/WEB-INF/lib` ? – ZhongYu Feb 15 '17 at 22:08
  • Yes did that.. Still doesn't work – Dipsraj Feb 15 '17 at 22:15
  • What happens if you put it inside of `/lib` as suggested [here](http://stackoverflow.com/questions/13161747/where-do-i-have-to-place-the-jdbc-driver-for-tomcats-connection-pool)? – Janez Kuhar Feb 15 '17 at 23:48
  • `/manager/WEB-INF/lib` is not your webapp, that is the manager web app included with tomcat. As you are probably deploying as a WAR, you need to make sure it is in the `WEB-INF/lib` of your WAR. – Mark Rotteveel Feb 16 '17 at 08:37
  • Tired all the above, doesn't work – Dipsraj Feb 16 '17 at 09:32

0 Answers0