Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver


O códigoClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

não pode lançarClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

pois os nomes são diferentes. É possível que você tenha configurado incorretamente em seu código?

Baixei o sqljdbc41.jar do site deles e vi que o nome correto da classe é com.microsoft.sqlserver.jdbc.SQLServerDriver .
$ jar tf sqljdbc41.jar | grep SQLServerDriver.class
com/microsoft/sqlserver/jdbc/SQLServerDriver.class

Acabei de encontrar os dois nomes na documentação da Web da Microsoft, então eles renomearam essa classe (alteraram seu pacote) em algum momento ou têm erros em alguns de seus documentos.

Tudo o que você precisa fazer é soltar esse .jar no diretório lib do Tomcat (por exemplo,apache-tomcat-7.0.67\lib ) e reinicie o Tomcat.

Se você tiver o nome de classe correto e o jar correto no diretório lib, e ainda estiver vendo esse erro, gostaria de saber se você tem algum tipo de erro de digitação na configuração do eclipse, e a implantação do eclipse está de alguma forma forçando uma tentativa de carregar isso nome de classe quebrado. (Eu não uso o Eclipse e não sei como implantar a partir daí).

Tente criar um aplicativo muito simples (e não conte ao Eclipse sobre a classe do 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 executando. Se você vir uma saída como:
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!

Isso significa que o driver foi carregado corretamente. A conexão falhou porque não tenho a instância do SQLServer atualmente em execução para testar.