4

I've put mysql driver in .../ROOT/WEB-INF/lib and Tomcat 8.0/lib but it has no effect. I'm using the following class to connect to DB:

package db;

import java.sql.*;

public class ConnectToDB implements AutoCloseable {
    Connection con;

    public ConnectToDB(String server, String database, String user,
            String password) throws SQLException {
        con = DriverManager.getConnection("jdbc:mysql://" + server + "/"
                + database, user, password);
    }

    @Override
    public void close() throws SQLException {
        con.close();
    }

    public Connection getConnection() {
        return con;
    }

}

The following classes are included in the Eclipse project:

1. src/nr3/model

package nr3.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import db.ConnectToDB;
public class MusikkHandler {
    private ConnectToDB db;
    private Connection con;
    private String tableName;
    private PreparedStatement pstmtGetRows;

    public MusikkHandler(String server, String database, String user,
            String password) throws SQLException {
        db = new ConnectToDB(server, database, user, password);
        con = db.getConnection();
        tableName = "album";
    }

    public void close() throws SQLException {
        db.close();
    }

    public ArrayList<Album> getRows(String genre) throws SQLException {
        ArrayList<Album> list = new ArrayList<Album>();
        pstmtGetRows = con.prepareStatement("SELECT * FROM " + tableName
                + " WHERE SJANGER = ?");
        pstmtGetRows.setString(1, genre);
        ResultSet rs = pstmtGetRows.executeQuery();
        while (rs.next()) {
            list.add(new Album(rs.getString(1), rs.getString(2), rs.getInt(3),
                    rs.getInt(4), rs.getString(5)));
        }
        rs.close();
        pstmtGetRows.close();
        return list;
    }
}

-

package nr3.model;

public class Album {
    private String tittel;
    private String artist;
    private int spor;
    private int utgitt;
    private String sjanger;

    public Album (String artist, String tittel, int spor, int utgitt, String sjanger){
        setArtist(artist);
        setTittel(tittel);
        setUtgitt(utgitt);
        setSpor(spor);
        setSjanger(sjanger);
    }
    public Album(){
        this(null, null, 0, 0, null);
    }
    public void setTittel(String tittel){
        this.tittel = tittel;
    }
    public void setArtist(String artist){
        this.artist = artist;
    }
    public void setSpor(int spor) {
        this.spor = spor;
    }
    public void setUtgitt(int utgitt) {
        this.utgitt = utgitt;
    }
    public void setSjanger(String sjanger) {
        this.sjanger = sjanger;
    }
    public String getTittel() {
        return tittel;
    }
    public String getArtist() {
        return artist;
    }
    public int getSpor() {
        return spor;
    }
    public int getUtgitt() {
        return utgitt;
    }
    public String getSjanger() {
        return sjanger;
    }
    public String toString(){
        return getTittel() + " (" + getArtist() + ")" + " Utgitt: " 
                                               + getUtgitt(); 
    }
}

2. src/nr3/servlets

package nr3.servlets;

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

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

import nr3.model.Album;
import nr3.model.MusikkHandler;

public class MusikkValg extends HttpServlet {

    private static final long serialVersionUID = 428937262021570370L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String genre = request.getParameter("sjanger");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        MusikkHandler mh;

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Musikk</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>MUSIKK-ANBEFALINGER</h1>");
        out.println("<br/>");
        out.println("<br/>");
        out.println("<h3>Da bør du kanskje forsøke en av disse:</h3>");
        out.println("<br/>");
        out.println("<br/>");
        try {
            mh = new MusikkHandler(" ", " ", " ", " ");
            for (Album a : mh.getRows(genre))
                out.println("<p>" + a + "</p>");
        } catch (SQLException e) {
            e.printStackTrace(out);
        }
        out.println("</body>");
        out.println("</html>");
    }

}

Update: I've got the following error stacktrace in the browser:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/pg3100 at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at db.ConnectToDB.(ConnectToDB.java:10) at nr3.model.MusikkHandler.(MusikkHandler.java:20) at nr3.servlets.MusikkValg.doGet(MusikkValg.java:39) at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2381) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2370) 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)

Alfabravo
  • 7,493
  • 6
  • 46
  • 82
contrapost
  • 673
  • 12
  • 22

1 Answers1

5

First, you must register your driver at the beginning so DriverManager can user it when getting a connection. It might vary on the implementation.

DriverManager.registerDriver (new com.mysql.jdbc.Driver());

or

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

Then you can perform a getConnection() because you'll have a driver registered to be used by DriverManager.

Second: /webapps/ROOT/WEB-INF/lib is a different context and its libraries won't be available for your app unless you are setting the context path of your app as shown in this question. If you wanna add it, try placing your JDBC driver on /webapps/<yourapp>/lib first. Tomcat lib should work as well (but it's not nice when you distribute your app, might conflict with other apps deployed there, using different versions of the driver, etc.)

Third: When asking here, try to reduce your verifiable example to something readable. There's a lot of code which is not relevant to your problem. Reducing makes it easier to read your question and provide help.

Community
  • 1
  • 1
Alfabravo
  • 7,493
  • 6
  • 46
  • 82