我正在尝试从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);
每当我尝试从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)
我已确保将必要的jdbc和jtds驱动程序添加到库中,并且还设置了CLASSPATH。老实说,我不确定这里出了什么问题。
编辑:根据建议,我尝试下载此jdbc jar并将其放在我的WEB-INF / lib中,然后将我的CLASSPATH变量设置为该位置。仍然存在同样的问题。
Edit2:没关系,完全重新安装Eclipse使它工作。这非常令人沮丧...
答案 0 :(得分:7)
您在类路径中不需要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
属性。
答案 1 :(得分:4)
您正在查看 sqljdbc4.2 版本,如:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
但是,对于 sqljdbc4 版本声明应为:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
我认为如果您更改第一个版本以编写正确的 Class.forName , 你的申请将会运行。
答案 2 :(得分: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);
答案 3 :(得分:0)
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();
}
}
答案 4 :(得分:0)
对我来说,在将sqljdbc4-2.jar手动复制到WEB-INF / lib文件夹后,它起作用了。 因此,请尝试一下。
答案 5 :(得分:0)
intellij idea 2019
或ub Gradle设置“编译” 编译组:“ com.microsoft.sqlserver”,名称:“ mssql-jdbc”,版本:“ 7.2.2.jre11”
答案 6 :(得分:0)
对我来说,这是错误的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>
答案 7 :(得分:-1)
这是你的答案
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();
}