sql >> Database >  >> RDS >> Sqlserver

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

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

kan ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

omdat de namen anders zijn. Is het mogelijk dat je het verkeerd hebt ingesteld in je code?

Ik heb de sqljdbc41.jar van hun website gedownload en zie dat de juiste naam voor de klasse com.microsoft.sqlserver.jdbc.SQLServerDriver is .

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

Ik heb zojuist beide namen gevonden in de webdocumentatie van Microsoft, dus ofwel hebben ze deze klasse op een bepaald moment hernoemd (het pakket gewijzigd), ofwel hebben ze fouten in sommige van hun documenten.

Het enige dat u hoeft te doen is die .jar in de lib-directory van Tomcat te plaatsen (bijv.apache-tomcat-7.0.67\lib ), en herstart Tomcat.

Als je de juiste klassenaam en de juiste jar in de lib-directory hebt en nog steeds die fout ziet, vraag ik me af of je een typefout hebt in je eclipse-configuratie, en het implementeren van eclipse dwingt op de een of andere manier een poging om dat te laden naam gebroken klasse. (Ik gebruik Eclipse niet en ik weet niet hoe ik het vanaf daar kan implementeren).

Probeer een heel eenvoudige applicatie te maken (en vertel eclipse niet over de MS-stuurprogrammaklasse):

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

En het runnen. Als je output ziet zoals:

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!

Het betekent dat het stuurprogramma correct is geladen. De verbinding is mislukt omdat ik momenteel geen SQLServer-instantie heb om tegen te testen.



  1. Hoe de IF/ELSE-instructie te gebruiken om een ​​nieuw xml-knooppuntitem in Sql bij te werken of te maken

  2. Inhoud wijzigen op basis van een vervolgkeuzelijst uit een mysql-database

  3. Hoe rijen efficiënt te verwijderen zonder Truncate Table te gebruiken in een tabel met meer dan 500.000 rijen?

  4. probleem om verbinding te maken met een externe mysql-database met behulp van php