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.
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.
Edit2: Peu importe, la réinstallation complète d’Eclipse a permis son bon fonctionnement. C'est assez frustrant ...
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
.
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.
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);
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.
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();
}
}