Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ClassNotFoundException – com.microsoft.jdbc.sqlserver.SQLServerDriver

Der Code Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver kann nicht ausgelöst werden

da die Namen unterschiedlich sind. Ist es möglich, dass Sie es in Ihrem Code falsch eingerichtet haben?

Ich habe sqljdbc41.jar von ihrer Website heruntergeladen und sehe, dass der korrekte Name für die Klasse com.microsoft.sqlserver.jdbc.SQLServerDriver ist .

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

Ich habe gerade beide Namen in der Webdokumentation von Microsoft gefunden, also haben sie diese Klasse entweder irgendwann umbenannt (ihr Paket geändert) oder sie haben Fehler in einigen ihrer Dokumente.

Alles, was Sie tun müssen, ist, diese .jar-Datei im lib-Verzeichnis von Tomcat abzulegen (z. B. apache-tomcat-7.0.67\lib ) und starten Sie Tomcat neu.

Wenn Sie den richtigen Klassennamen und das richtige JAR im lib-Verzeichnis haben und diesen Fehler immer noch sehen, frage ich mich, ob Sie eine Art Tippfehler in Ihrem Eclipse-Setup haben und das Deployment von Eclipse irgendwie einen Versuch erzwingt, das zu laden kaputter Klassenname. (Ich verwende Eclipse nicht und weiß nicht, wie man von dort aus bereitstellt).

Versuchen Sie, eine sehr einfache Anwendung zu erstellen (und sagen Sie Eclipse nichts über die MS-Treiberklasse):

@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>");
        }
    }
}

Und läuft es. Wenn Sie eine Ausgabe sehen wie:

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!

Dies bedeutet, dass der Treiber ordnungsgemäß geladen wurde. Die Verbindung ist fehlgeschlagen, da derzeit keine SQLServer-Instanz zum Testen ausgeführt wird.