Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

КодътClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

не може да хвърлиClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

тъй като имената са различни. Възможно ли е да сте го настроили неправилно във вашия код?

Изтеглих sqljdbc41.jar от техния уебсайт и виждам, че правилното име за класа е com.microsoft.sqlserver.jdbc.SQLServerDriver .

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

Току-що намерих и двете имена в уеб документацията на Microsoft, така че или са преименували този клас (променили пакета му) в даден момент, или имат грешки в някои от документите си.

Всичко, което трябва да направите, е да пуснете този .jar в директорията lib на Tomcat (напр. apache-tomcat-7.0.67\lib ) и рестартирайте Tomcat.

Ако имате правилното име на клас и правилния буркан в директорията lib и все още виждате тази грешка, чудя се дали имате някаква печатна грешка в настройката на eclipse и внедряването от eclipse по някакъв начин принуждава опит за зареждане на това счупено име на клас. (Не използвам Eclipse и не знам за внедряване оттам).

Опитайте да създадете много просто приложение (и не казвайте на eclipse за 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>");
        }
    }
}

И го управлява. Ако видите резултат като:

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!

Това означава, че драйверът е зареден правилно. Връзката е неуспешна b/c. Нямам екземпляр на SQLServer, работещ в момента, срещу който да тествам.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка „Трябва да декларира скаларната променлива“ при предаване на параметър с таблична стойност към параметризиран SQL оператор

  2. Как мога да реша проблем с пула за връзки между ASP.NET и SQL Server?

  3. Връща стойност и набор от резултати от запомнена процедура класически asp

  4. Преименувайте SA акаунта в SQL Server (пример за T-SQL)

  5. Извличане на идентификатора на вмъкнат запис:Php &MS SQL SERVER