Ich versuche, von Java aus eine Verbindung zu meiner SQL Server 2008-Datenbank herzustellen, und ich habe das gleiche Problem mit diesem 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);
Ich bekomme immer eine ClassNotFoundException
Immer wenn ich versuche, den Treiber von Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
zu laden
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)
Ich habe sichergestellt, dass die erforderlichen Treiber für jdbc und jtds zur Bibliothek hinzugefügt werden, und CLASSPATH ist ebenfalls festgelegt. Ich bin ehrlich nicht sicher, was hier schief gelaufen ist.
Bearbeiten: Auf Vorschlag habe ich versucht, diese jdbc jar herunterzuladen und in meine WEB-INF/lib zu platzieren, und dann meine CLASSPATH-Variable auf diesen Speicherort setzen. Trotzdem passiert das gleiche Problem.
Edit2: Egal, eine vollständige Neuinstallation von Eclipse hat es zum Laufen gebracht. Das ist ziemlich frustrierend ...
Sie benötigen weder jTDS noch JDBC in Ihrem Klassenpfad. Jeder ist erforderlich. Hier brauchen Sie nur sqljdbc.jar
.
Ich würde auch vorschlagen, sqljdbc.jar
an einem physischen Ort im /WEB-INF/lib
-Verzeichnis Ihres Projekts zu platzieren, anstatt es über IDE in den Classpath hinzuzufügen. Dann kümmert sich Tomcat um den Rest. Versuchen Sie auch, Tomcat neu zu starten.
Sie können Jar von: www.Java2s.com/Code/JarDownload/sqlserverjdbc/sqlserverjdbc.jar.Zip herunterladen.
BEARBEITEN:
Da Sie bei der Verbindung Benutzername und Passwort angeben,
Sie brauchen nur das jdbc:sqlserver://localhost:1433;databaseName=test
, das integratedSecurity
-Attribut überspringen.
Sie sehen hier sqljdbc4.2 Version wie:
Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
für sqljdbc4 version-Anweisung sollte jedoch lauten:
Class.forName("com.Microsoft.jdbc.sqlserver.SQLServerDriver");
Ich denke, wenn Sie Ihre erste Version ändern, um die richtige Class.forName , Zu schreiben, wird Ihre Anwendung ausgeführt.
Für mich hat es funktioniert, sobald ich mich geändert habe
Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
zu:
in POM
<dependency>
<groupId>com.Microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.1.0.jre8</version>
</dependency>
und dann:
import com.Microsoft.sqlserver.jdbc.SQLServerDriver;
...
DriverManager.registerDriver(SQLServerDriver());
Connection connection = DriverManager.getConnection(connectionUrl);
intellij idea 2019
oder ub Gradle set "compile" compile group: 'com.Microsoft.sqlserver', name: 'mssql-jdbc', version: '7.2.2.jre11'
Für mich war es eine falsche Maven-Abhängigkeitsverzögerung, also hier der richtige Weg:
für sqljdbc4 verwenden Sie: sqljdbc4-Abhängigkeit
<dependency>
<groupId>com.Microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
für sqljdbc42 verwenden Sie: sqljdbc42-Abhängigkeit
<dependency>
<groupId>com.Microsoft.sqlserver</groupId>
<artifactId>sqljdbc42</artifactId>
<version>6.0.8112</version>
</dependency>
Bei mir funktionierte es nach dem manuellen Kopieren der Datei sqljdbc4-2.jar in den Ordner WEB-INF/lib . Versuchen Sie es bitte auch.
hier ist deine Antwort
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();
}
}