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

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

Il codiceClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

impossibile generareClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

visto che i nomi sono diversi. È possibile che tu l'abbia impostato in modo errato nel tuo codice?

Ho scaricato sqljdbc41.jar dal loro sito Web e ho visto che il nome corretto per la classe è com.microsoft.sqlserver.jdbc.SQLServerDriver .

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

Ho appena trovato entrambi i nomi nella documentazione web di Microsoft, quindi o hanno rinominato questa classe (modificato il suo pacchetto) a un certo punto, oppure hanno errori su alcuni dei loro documenti.

Tutto quello che dovresti fare è rilasciare quel .jar nella directory lib di Tomcat (ad es.apache-tomcat-7.0.67\lib ) e riavvia Tomcat.

Se hai il nome della classe corretto e il jar corretto nella directory lib e vedi ancora quell'errore, mi chiedo se hai una sorta di errore di battitura nella tua configurazione di eclipse e la distribuzione da eclipse sta in qualche modo forzando un tentativo di caricarlo nome della classe non funzionante. (Non uso Eclipse e non so come distribuire da lì).

Prova a creare un'applicazione molto semplice (e non dire a Eclipse della classe di driver MS):

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

E facendolo funzionare. Se vedi un output come:

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!

Significa che il driver è stato caricato correttamente. La connessione non è riuscita b/c Non ho l'istanza di SQLServer attualmente in esecuzione per il test.