【问题标题】:com.microsoft.sqlserver.jdbc.SQLServerDriver not found errorcom.microsoft.sqlserver.jdbc.SQLServerDriver not found 错误
【发布时间】:2013-02-20 22:13:24
【问题描述】:

我正在尝试从 Java 连接到我的 SQL Server 2008 数据库,但我在 thread 中遇到了同样的问题。

String userName = "xxxx";
String password = "xxxx";
String url = "jdbc:sqlserver:xxx.xxx.xxx.xxx;databaseName=asdfzxcvqwer;integratedSecurity=true";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection(url, userName, password);

每当我尝试从Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 加载驱动程序时,我都会收到ClassNotFoundException

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at repositories.RepositoryBase.<init>(RepositoryBase.java:22)
    at repositories.ProductsRepository.<init>(ProductsRepository.java:13)
    at api.Products.init(Products.java:31)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我已确保将必要的 jdbc 和 jtds 驱动程序添加到库中,并且还设置了 CLASSPATH。老实说,我不确定这里出了什么问题。

编辑:根据建议,我尝试下载此 jdbc jar 并将其放在我的 WEB-INF/lib 中,然后将我的 CLASSPATH 变量设置为该位置。不过,同样的问题正在发生。

Edit2:没关系,完全重新安装 Eclipse 就可以了。这真是令人沮丧...

【问题讨论】:

  • 尝试将this jar 包含到您的类路径中
  • Mot 可能不相关:但为什么你的类路径中有 jTDS Microsoft 驱动程序?你只需要其中一个。
  • @a_horse_with_no_name 我误读了教程。我现在删除了它,但仍然是同样的错误。
  • 当你使用;integratedSecurity=true时,你还需要确保sqljdbc_auth.dll可以被你的类加载(所以它需要在java.library.path上)
  • @a_horse_with_no_name java.library.path?你的意思是我需要通过Add External Class Folder添加包含jar的路径或者将类路径设置为目录路径而不是jar文件的完整路径?但我认为我的问题出现在身份验证问题之前,因为它甚至无法找到课程。

标签: java sql-server eclipse jdbc


【解决方案1】:

您的类路径中不需要 jTDS 和 JDBC。任何一个都是必需的。这里你只需要sqljdbc.jar

另外,我建议将sqljdbc.jar 放在项目的/WEB-INF/lib 目录的物理位置,而不是通过IDE 将其添加到Classpath 中。然后 Tomcat 负责其余的工作。并尝试重新启动 Tomcat。

你可以从www.java2s.com/Code/JarDownload/sqlserverjdbc/sqlserverjdbc.jar.zip下载Jar

编辑:

由于您在连接时提供用户名和密码,

您只需要jdbc:sqlserver://localhost:1433;databaseName=test,跳过integratedSecurity 属性。

【讨论】:

    【解决方案2】:

    您正在查看 sqljdbc4.2 版本,例如:

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    

    但是,对于 sqljdbc4 版本的声明应该是:

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    

    我认为如果您更改第一个版本以编写正确的 Class.forName , 您的应用程序将运行。

    【讨论】:

    【解决方案3】:

    对我来说,一旦我改变它就起作用了

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    

    到:

    在 POM 中

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>6.1.0.jre8</version>
    </dependency>
    

    然后:

    import com.microsoft.sqlserver.jdbc.SQLServerDriver;
    

    ...

    DriverManager.registerDriver(SQLServerDriver());    
    Connection connection = DriverManager.getConnection(connectionUrl); 
    

    【讨论】:

      【解决方案4】:

      智能理念 2019

      1. 下载适用于 SQL Server 的 Microsoft JDBC 驱动程序

      (https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017)

      1. 解压(“C:\opt\sqljdbc_7.2\enu\mssql-jdbc-7.2.2.jre11.jar”)
      2. 添加; (文件->项目结构->全局库)
      3. 使用; (将 Jar 文件添加到 IntellijIdea 类路径(看视频)) 导入 com.microsoft.sqlserver.jdbc.SQLServerDriver; https://youtu.be/-2hjxoRKsyk

      或 ub Gradle 设置“编译” 编译组:'com.microsoft.sqlserver',名称:'mssql-jdbc',版本:'7.2.2.jre11'

      【讨论】:

        【解决方案5】:

        这是你的答案

        String userName = "xxxx";
            String password = "xxxx";
            String url = "jdbc:sqlserver:xxx.xxx.xxx.xxx;databaseName=asdfzxcvqwer;integratedSecurity=true";
        
            try {
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    connection = DriverManager.getConnection(url, userName, password); 
        
          } catch (Exception e)
          {
             e.printStackTrace();
          }
        

        【讨论】:

        • 请添加简要说明
        【解决方案6】:
        public static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=dbName";
        public static final String USERNAME = "xxxx";
        public static final String PASSWORD = "xxxx";
        
        /**
         *  This method
            @param args     command line argument
        */
        public static void main(String[] args)
        {
           try
           {
                Connection connection;
                DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());   
                connection = DriverManager.getConnection(MainDriver.URL,MainDriver.USERNAME,
                                MainDriver.PASSWORD);
                String query ="select * from employee";
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery(query);
                while(resultSet.next())
                {
                    System.out.print("First Name: " + resultSet.getString("first_name"));
                    System.out.println("  Last Name: " + resultSet.getString("last_name"));                
                }
           }catch(Exception ex)
           {
                ex.printStackTrace();
           }
        }
        

        【讨论】:

          【解决方案7】:

          对我来说,它在手动将 sqljdbc4-2.jar 复制到 WEB-INF/lib 文件夹后工作。 所以也请尝试一下。

          【讨论】:

            【解决方案8】:

            对我来说这是一个错误的 maven 依赖减速,所以这里是正确的方法:

            对于 sqljdbc4 使用:sqljdbc4 dependency

            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>sqljdbc4</artifactId>
                <version>4.0</version>
            </dependency>
            

            对于 sqljdbc42 使用:sqljdbc42 dependency

            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>sqljdbc42</artifactId>
                <version>6.0.8112</version>
            </dependency>
            

            【讨论】:

              猜你喜欢
              • 2019-05-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-26
              • 1970-01-01
              相关资源
              最近更新 更多