com.microsoft.sqlserver.jdbc.SQLServerDriver未找到错误

l46*_*kok 9 java eclipse sql-server jdbc

我试图从Java连接到我的SQL Server 2008数据库,我从这个线程遇到了同样的问题.

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);
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

编辑:根据建议,我尝试下载这个jdbc jar并将其放在我的WEB-INF/lib中,然后将我的CLASSPATH变量设置为该位置.然而,同样的问题正在发生.在此输入图像描述

Edit2:没关系,完全重新安装Eclipse使它工作.这非常令人沮丧......

Har*_*hra 10

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

另外,我建议将sqljdbc.jar物理位置/WEB-INF/lib放在项目目录中,而不是通过IDE将其添加到Classpath中.然后Tomcat会照顾其余部分.并尝试重启Tomcat.

您可以从以下网址下载Jar:www.java2s.com/Code/JarDownload/sqlserverjdbc/sqlserverjdbc.jar.zip

编辑:

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

您只需要jdbc:sqlserver://localhost:1433;databaseName=testSkip integratedSecurity属性.


小智 5

您正在查看类似的sqljdbc4.2版本:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Run Code Online (Sandbox Code Playgroud)

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

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Run Code Online (Sandbox Code Playgroud)

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


est*_*ezg 5

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

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Run Code Online (Sandbox Code Playgroud)

到:

在 POM 中

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

进而:

import com.microsoft.sqlserver.jdbc.SQLServerDriver;
Run Code Online (Sandbox Code Playgroud)

...

DriverManager.registerDriver(SQLServerDriver());    
Connection connection = DriverManager.getConnection(connectionUrl); 
Run Code Online (Sandbox Code Playgroud)