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変数をその場所に設定しました。それでも、同じ問題が発生しています。
編集2:気にしないで、Eclipseを完全に再インストールすると動作しました。これはかなりイライラします...
クラスパスにjTDSとJDBCの両方は必要ありません。いずれかが必要です。ここで必要なのはsqljdbc.jar
。
また、sqljdbc.jar
物理的な場所で/WEB-INF/lib
IDEを介してクラスパスに追加するのではなく、プロジェクトのディレクトリ。その後、Tomcatが残りを処理します。また、Tomcatを再起動してみてください。
Jarは次の場所からダウンロードできます。 www.Java2s.com/Code/JarDownload/sqlserverjdbc/sqlserverjdbc.jar.Zip
編集:
接続時にユーザー名とパスワードを提供しているため、
必要なのはjdbc:sqlserver://localhost:1433;databaseName=test
、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);
intellij idea 2019
またはub Gradle set "compile"コンパイルグループ: 'com.Microsoft.sqlserver'、名前: 'mssql-jdbc'、バージョン: '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>
私にとっては、sqljdbc4-2.jarをWEB-INF/libフォルダーに手動でコピーした後に機能しました。これも試してみてください。
ここにあなたの答えがあります
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();
}
}