sql >> Databáze >  >> RDS >> Sqlserver

ClassNotFoundException – com.microsoft.jdbc.sqlserver.SQLServerDriver

KódClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

nelze vyvolatClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

protože jména jsou různá. Je možné, že to máte v kódu špatně nastavené?

Stáhl jsem si sqljdbc41.jar z jejich webových stránek a vidím, že správný název třídy je com.microsoft.sqlserver.jdbc.SQLServerDriver .

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

Právě jsem našel oba názvy ve webové dokumentaci společnosti Microsoft, takže buď tuto třídu v určitém okamžiku přejmenovali (změnili její balíček), nebo mají v některých svých dokumentech chyby.

Vše, co byste měli udělat, je umístit tento .jar do adresáře lib Tomcatu (např. apache-tomcat-7.0.67\lib ) a restartujte Tomcat.

Pokud máte správný název třídy a správný jar v adresáři lib a stále vidíte tuto chybu, zajímalo by mě, jestli nemáte v nastavení Eclipse nějaký překlep a nasazení z Eclipse nějak vynucuje pokus o načtení poškozený název třídy. (Nepoužívám Eclipse a nevím o jeho nasazení).

Zkuste vytvořit velmi jednoduchou aplikaci (a neříkejte Eclipse o třídě ovladačů 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>");
        }
    }
}

A provozovat to. Pokud vidíte výstup jako:

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!

To znamená, že se ovladač správně načetl. Připojení se nezdařilo b/c. Aktuálně nemám spuštěnou instanci SQLServeru k testování.



  1. C# Chyba ORA 00907:Chybějící pravá závorka

  2. přechod z MySQL na PostgreSQL pro Ruby on Rails kvůli Heroku

  3. Příklady JSON_MODIFY() v SQL Server (T-SQL)

  4. org.postgresql.util.PSQLException:ERROR:sloupec user0_.id neexistuje - Hibernace