web-dev-qa-db-fra.com

com.Microsoft.sqlserver.jdbc.SQLServerDriver not found erreur

J'essaie de me connecter à ma base de données SQL Server 2008 à partir de Java et je rencontre le même problème à partir de ce 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);

Je continue à recevoir une ClassNotFoundException chaque fois que j'essaie de charger le pilote à partir de 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)

Je me suis assuré que les pilotes jdbc et jtds nécessaires étaient ajoutés à la bibliothèque et que CLASSPATH était également défini. Honnêtement, je ne sais pas ce qui ne va pas ici.enter image description here

Edit: Sur suggestion, j'ai essayé de télécharger ce jdbc jar et de le placer dans mon WEB-INF/lib, puis de définir ma variable CLASSPATH à cet emplacement. Pourtant, le même problème se produit.enter image description here

Edit2: Peu importe, la réinstallation complète d’Eclipse a permis son bon fonctionnement. C'est assez frustrant ...

7
l46kok

Vous n'avez pas besoin de jTDS et JDBC dans votre chemin de classe. Tout le monde est requis. Ici, vous avez seulement besoin de sqljdbc.jar.

De plus, je suggérerais de placer sqljdbc.jar à l’emplacement physique dans le répertoire /WEB-INF/lib de votre projet plutôt que de l’ajouter dans le Classpath via IDE. Ensuite, Tomcat se charge du reste. Et essayez également de redémarrer Tomcat.

Vous pouvez télécharger Jar à partir de: www.Java2s.com/Code/JarDownload/sqlserverjdbc/sqlserverjdbc.jar.Zip

MODIFIER:

Lorsque vous fournissez nom d'utilisateur et mot de passe lors de la connexion, 

Vous n'avez besoin que de l'attribut jdbc:sqlserver://localhost:1433;databaseName=test, Skip integratedSecurity.

7
Hardik Mishra

Vous regardez la version de sqljdbc4.2 comme suit: 

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

mais, pour sqljdbc4, l'instruction de version devrait être:

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

Je pense que si vous modifiez votre première version pour écrire le correct Class.forName, Votre application s'exécutera.

4
tanpham

Pour moi, cela a fonctionné une fois que j'ai changé

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

à:

dans POM

<dependency>
    <groupId>com.Microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.1.0.jre8</version>
</dependency>

et alors:

import com.Microsoft.sqlserver.jdbc.SQLServerDriver;

...

DriverManager.registerDriver(SQLServerDriver());    
Connection connection = DriverManager.getConnection(connectionUrl); 
3
hestellez

Pour moi, cela a fonctionné après la copie manuelle du fichier sqljdbc4-2.jar dans le dossier WEB-INF/lib . Alors, essayez-le également.

0
raji
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