Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

ClassNotFoundException — com.microsoft.jdbc.sqlserver.SQLServerDriver

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

nie można rzucićClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

ponieważ nazwy są różne. Czy to możliwe, że masz go nieprawidłowo skonfigurowany w kodzie?

Pobrałem plik sqljdbc41.jar z ich strony internetowej i zobaczyłem, że poprawna nazwa klasy to com.microsoft.sqlserver.jdbc.SQLServerDriver .

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

Właśnie znalazłem obie nazwy w dokumentacji internetowej Microsoftu, więc albo zmienili nazwę tej klasy (zmienili jej pakiet) w pewnym momencie, albo mają błędy w niektórych swoich dokumentach.

Wszystko, co musisz zrobić, to umieścić ten plik .jar w katalogu lib Tomcata (np.apache-tomcat-7.0.67\lib ) i uruchom ponownie Tomcata.

Jeśli masz poprawną nazwę klasy i właściwy jar w katalogu lib, a nadal widzisz ten błąd, zastanawiam się, czy masz jakąś literówkę w swojej konfiguracji eclipse, a wdrażanie z eclipse wymusza w jakiś sposób próbę załadowania tego zepsuta nazwa klasy. (Nie używam Eclipse i nie wiem o wdrażaniu stamtąd).

Spróbuj stworzyć bardzo prostą aplikację (i nie mów eclipse o klasie sterowników 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>");
        }
    }
}

I prowadzenie go. Jeśli widzisz dane wyjściowe takie jak:

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!

Oznacza to, że sterownik załadował się poprawnie. Połączenie nie powiodło się b/c Nie mam aktualnie uruchomionej instancji SQLServer do testowania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 świetnych zasobów, które pomogą Ci w pełnieniu roli monitorowania bazy danych

  2. Jak mogę uzyskać konkretną porcję wyników?

  3. Konwertuj „smalldatetime” na „time” w SQL Server (przykłady T-SQL)

  4. Jak odbudować widok w SQL Server 2008

  5. Replikacja serwera SQL za pomocą FTP