[英]com.microsoft.sqlserver.jdbc.SQLServerDriver class not found exception (NEW)
[英]com.microsoft.sqlserver.jdbc.SQLServerDriver not found error
我正在嘗試從 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);
每當我嘗試從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 使其工作。 這很令人沮喪...
您不需要在類路徑中同時使用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=test
,Skip integratedSecurity
屬性。
您正在查看sqljdbc4.2版本,如:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
但是,對於sqljdbc4版本語句應該是:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
我想如果您更改第一個版本以編寫正確的Class.forName ,您的應用程序將運行。
對我來說,一旦我改變了它就起作用了
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);
這是你的答案
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();
}
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();
}
}
對我來說,它在將sqljdbc4-2.jar手動復制到WEB-INF / lib文件夾后起作用。 所以請試試這個。
intellij idea 2019
或者ub Gradle設置“編譯”編譯組:'com.microsoft.sqlserver',name:'mssql-jdbc',version:'7.2.2.jre11'
對我來說這是一個錯誤的maven依賴減速,所以這是正確的方法:
對於sqljdbc4使用: sqljdbc4依賴
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
對於sqljdbc42使用: sqljdbc42依賴
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc42</artifactId>
<version>6.0.8112</version>
</dependency>
我的代碼庫有
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
它正在提取舊版本的mssql-jdbc
我用下面的依賴項替換了它,它起作用了。
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.4.1.jre8</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.