sql >> Databasteknik >  >> RDS >> Sqlserver

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

KodenClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

kan inte kastaClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

eftersom namnen är olika. Är det möjligt att du har ställt in det felaktigt i din kod?

Jag laddade ner sqljdbc41.jar från deras webbplats och ser att det korrekta namnet för klassen är com.microsoft.sqlserver.jdbc.SQLServerDriver .

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

Jag hittade precis båda namnen i Microsofts webbdokumentation, så antingen döpte de om den här klassen (ändrade dess paket) någon gång, eller så har de fel på några av sina dokument.

Allt du behöver göra är att släppa den där .jaren i Tomcats lib-katalog (t.ex.apache-tomcat-7.0.67\lib ), och starta om Tomcat.

Om du har rätt klassnamn och rätt jar i lib-katalogen och fortfarande ser det felet, undrar jag om du har något slags stavfel i din eclipse-inställning, och att distribuera från eclipse tvingar på något sätt ett försök att ladda det trasigt klassnamn. (Jag använder inte Eclipse, och jag vet inte hur jag distribuerar därifrån).

Försök att skapa ett mycket enkelt program (och berätta inte för eclipse om MS-drivrutinen):

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

Och kör den. Om du ser utdata som:

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!

Det betyder att drivrutinen laddades ordentligt. Anslutningen misslyckades b/c Jag har inte SQLServer-instans som körs för närvarande att testa mot.



  1. java.sql.SQLException:Fältet 'supplier_id' har inget standardvärde

  2. Relationsdelning i mysql utan aggregerade funktioner?

  3. Jag får ett pg-fel när jag försöker förstöra en kontroller

  4. Hur ordnar man om objekt i listan i enlighet med ett givet mönster?