web-dev-qa-db-ja.com

com.Microsoft.sqlserver.jdbc.SQLServerDriverが見つかりませんエラー

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も設定されていることを確認しました。ここで何がうまくいかなかったかは正直わかりません。enter image description here

編集:提案に応じて、私はこれをダウンロードしようとしました jdbc jar WEB-INF/libに配置し、CLASSPATH変数をその場所に設定しました。それでも、同じ問題が発生しています。enter image description here

編集2:気にしないで、Eclipseを完全に再インストールすると動作しました。これはかなりイライラします...

9
l46kok

クラスパスに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=testintegratedSecurity属性をスキップします。

10
Hardik Mishra

sqljdbc4.2のようなバージョンを見ています:

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

ただし、sqljdbc4バージョンステートメントは次のようになります。

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

最初のバージョンを変更して正しいClass.forNameを記述すると、アプリケーションが実行されると思います。

5
tanpham

私にとっては、一度変更するとうまくいった

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
hestellez

intellij idea 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クラスパスに追加する(ビデオを見る)) add import com.Microsoft.sqlserver.jdbc.SQLServerDriver; enter image description herehttps://youtu.be/-2hjxoRKsyk

またはub Gradle set "compile"コンパイルグループ: 'com.Microsoft.sqlserver'、名前: 'mssql-jdbc'、バージョン: '7.2.2.jre11'

0

私にとっては、それは間違った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>
0
dorony

私にとっては、sqljdbc4-2.jarをWEB-INF/libフォルダーに手動でコピーした後に機能しました。これも試してみてください。

0
raji

ここにあなたの答えがあります

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();
  }
0
berdohan
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();
   }
}
0
Tabish Ali