sql >> Database teknologi >  >> RDS >> Sqlserver

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

KodenClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

kan ikke kasteClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

da navnene er forskellige. Er det muligt, at du har konfigureret det forkert i din kode?

Jeg downloadede sqljdbc41.jar fra deres hjemmeside og så, at det korrekte navn for klassen er com.microsoft.sqlserver.jdbc.SQLServerDriver .

$ jar tf sqljdbc41.jar | grep SQLServerDriver.class
com/microsoft/sqlserver/jdbc/SQLServerDriver.class

Jeg har lige fundet begge navne i Microsofts webdokumentation, så enten omdøbte de denne klasse (ændrede dens pakke) på et tidspunkt, eller også har de fejl på nogle af deres dokumenter.

Alt du skal gøre er at slippe den .jar i Tomcats lib-bibliotek (f.eks.apache-tomcat-7.0.67\lib ), og genstart Tomcat.

Hvis du har det korrekte klassenavn og den rigtige jar i lib-mappen, og stadig ser den fejl, spekulerer jeg på, om du har en slags tastefejl i dit eclipse-opsætning, og implementering fra eclipse tvinger på en eller anden måde et forsøg på at indlæse det ødelagt klassenavn. (Jeg bruger ikke Eclipse, og jeg ved ikke om implementering derfra).

Prøv at oprette et meget simpelt program (og fortæl ikke Eclipse om MS-driverklassen):

@WebServlet("/")
public class SimpleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // Set response content type
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println("<h1>" + "Welcome to the servlet!" + "</h1>");
        try {
            String server = "localhost";
            String database = "testDB";
            String password = "sapassword";

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://"+server+":1433;databaseName="+database+";user=sa;password="+password+";";
            Connection con = (Connection) DriverManager.getConnection(connectionUrl);
        } catch (ClassNotFoundException e) {
            out.println("<h2>" + e.getClass().getSimpleName() + "_" + e.getMessage() + "</h2>");
        } catch (SQLException e){
            out.println("<h2>" + e.getClass().getSimpleName() + "_" + e.getMessage() + "</h2>");
        } finally {
            out.println("<h1>" + "That's the end of the servlet!" + "</h1>");
        }
    }
}

Og kører det. Hvis du ser output som:

Welcome to the servlet!

SQLServerException_The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

That's the end of the servlet!

Det betyder, at driveren er indlæst korrekt. Forbindelsen mislykkedes b/c. Jeg har ikke en SQLServer-instans, der kører i øjeblikket at teste imod.



  1. Hvordan sletter man dubletter på en MySQL-tabel?

  2. Vend den naturlige rækkefølge af en MySQL-tabel uden ORDER BY?

  3. Sådan beregner du fastholdelse måned over måned ved hjælp af SQL

  4. %ENV virker ikke, og jeg kan ikke bruge delt bibliotek