Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

Le codeClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

ne peut pas lancer ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

car les noms sont différents. Est-il possible que vous l'ayez mal configuré dans votre code ?

J'ai téléchargé le sqljdbc41.jar à partir de leur site Web et je vois que le nom correct de la classe est com.microsoft.sqlserver.jdbc.SQLServerDriver .

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

Je viens de trouver les deux noms sur la documentation Web de Microsoft, donc soit ils ont renommé cette classe (modifié son package) à un moment donné, soit ils ont des erreurs sur certains de leurs documents.

Tout ce que vous devez faire est de déposer ce .jar dans le répertoire lib de Tomcat (par exemple, apache-tomcat-7.0.67\lib ) et redémarrez Tomcat.

Si vous avez le bon nom de classe et le bon jar dans le répertoire lib, et que vous voyez toujours cette erreur, je me demande si vous avez une sorte de faute de frappe dans votre configuration d'eclipse, et le déploiement à partir d'eclipse force en quelque sorte une tentative de charger cela nom de classe cassé. (Je n'utilise pas Eclipse et je ne sais pas comment déployer à partir de là).

Essayez de créer une application très simple (et ne parlez pas à Eclipse de la classe de pilote 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>");
        }
    }
}

Et le faire fonctionner. Si vous voyez une sortie comme :

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!

Cela signifie que le pilote s'est chargé correctement. La connexion a échoué parce que je n'ai pas d'instance SQLServer en cours d'exécution pour tester.