Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die Java-Datenbankkonnektivität (SCRIPT) und die Schritte zur Problembehandlung beschrieben, die während der Konfiguration auftreten. Der Fokus liegt auf SQL Server.
Notiz
- Dieser Artikel basiert auf dem neuesten INSTALLATIONStreiber (Version 12.4), der im Stammverzeichnis des C-Laufwerks installiert ist.
- Microsoft behebt keine Problembehandlung für VERBINDUNGEN, bei denen ein Verbindungspool-Manager eines Drittanbieters vorhanden ist. Die Problembehandlung bei einem Verbindungspool-Manager eines Drittanbieters hat das Potenzial, Informationen zum geistigen Eigentum verfügbar zu machen.
Microsoft JDBC-Treiber für SQL Server
Dieser Artikel enthält Referenzleitfaden zu VORGANG, einschließlich Treiber und Unterstützende Dokumentation, Installationsanweisungen für verschiedene Betriebssysteme (Betriebssystem) und Problembehandlung bei SQL Server-Verbindungsproblemen.
ÄNDERUNGEN DER VERSION DES TREIBERS FÜR TREIBER
ANFORDERUNGEN AN DAS UNTERNEHMEN
Die Java Runtime Environment (JRE) -Version muss dem Treiber mit der im Namen angegebenen JRE-Version entsprechen. Beispielsweise erfordert mssql-jdbc-9.4.1.jre8.jar JRE 1.8 und mssql-jdbc-9.4.1.jre11.jar JRE 11.0 erfordert.
CLASSPATH ist eine Java-Umgebungsvariable, die den Verzeichnispfad und binäre Jar-Dateien enthält. Java benötigt sie, um die gewünschte Anwendung auszuführen. Es ist eine Anforderung, anzugeben, welcher Treiber und welche Abhängigkeits-Binär-Jar-Dateien Java ausführen muss. Das Minimum
CLASSPATH
umfasst das aktuelle Arbeitsverzeichnis.;
und den Speicherort der DATEI DES TREIBER-JAR DES TREIBERs.
SCHRITTE zur KONFIGURATION UND PROBLEMBEHANDLUNG
Festlegen der CLASSPATH-Variablen
CLASSPATHs können in der Betriebssystemumgebungsvariable oder in der Anwendungsumgebung selbst definiert werden, z. B. Tomcat. Wenn CLASSPATH
sie in der Anwendungsumgebung definiert ist, muss der Anwendungsanbieter oder Entwickler eingebunden werden, um sicherzustellen, dass die richtigen CLASSPATH
Konfigurationen vorhanden sind.
Verwenden Sie zum Festlegen CLASSPATH
eine der folgenden Methoden:
Notiz
Die Eingabeaufforderungseinstellung ist temporär und wird entfernt, wenn Sie das Eingabeaufforderungsfenster schließen. Die grafische Benutzeroberfläche (GUI) ist eine dauerhafte Einstellung und erfordert einen Neustart.
Beispiel für eine Eingabeaufforderung
Set CLASSPATH=.;C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar
GUI-Beispiel
Führen Sie die folgenden Schritte aus, um die Verwendung der GUI festzulegen CLASSPATH
:
Öffnen Sie Systemsteuerung, und wählen Sie "System und Sicherheit" aus.
Wählen Sie "System>Advanced System Settings" aus.
Wählen Sie "Umgebungsvariablen Neu" aus, und geben Sie dann "CLASSPATH" als Variablennamen ein.>
Wählen Sie "Bearbeiten" aus, und geben Sie ".; C:\sqljdbc_12.4\enu\mssql-jdbc-12.4.0.jre8.jar als Variablenwert.
Wählen Sie OK aus.
Verbindungszeichenfolgen mit übergebenen Anmeldeinformationen
Ein Verbindungszeichenfolge mit übergebenen Anmeldeinformationen bezieht sich auf eine Verbindungszeichenfolge, die Authentifizierungsanmeldeinformationen (z. B. Benutzername und Kennwort) als Parameter oder Werte innerhalb der Zeichenfolge enthält. Wenn ein Programm eine Verbindung mit einer Datenbank oder einem anderen Dienst herstellt, muss es Authentifizierungsinformationen bereitstellen, um eine sichere Verbindung herzustellen.
Die folgende Verbindungszeichenfolge zeigt ein Beispiel für das Herstellen einer Verbindung mit einer SQL Server-Datenbank basierend auf dem Authentifizierungsmodus, den Sie verwenden möchten:
SQL Server-Authentifizierung
Verbindungszeichenfolge ist String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MySQLAuthAccount>;password=<MyPassword>;trustServerCertificate=true;"
Windows AD-Authentifizierung ohne integrierte Sicherheit
Verbindungszeichenfolge ist String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Windows AD-Authentifizierung mit Kerberos und ohne integrierte Sicherheit
Verbindungszeichenfolge ist String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;user=<MyADAuthAccount>;password=<MyPassword>;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos"
Integrierte NTLM-Verbindung
In dieser Art von Verbindung muss sich der Clientcomputer in einer Windows-Domäne befinden.
Die Datei mssql-jdbc_auth-version-arch>><<.dll muss sich in den folgenden Pfaden befinden:
64-Bit-DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll
32-Bit-DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Sie können entweder den Pfad ändern und hinzufügen oder die Datei in einen bereits eingerichteten Pfad kopieren. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit integrierter Authentifizierung unter Windows.
Verbindungszeichenfolge ist String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyDomain>;trustServerCertificate=true;javaAuthentication=NTLM"
Integrierte Kerberos-Verbindungen
Die Voraussetzungen für diese Art von Verbindung sind:
- Muss Teil einer Domäne sein.
- Muss SSSD auf dem Linux-Betriebssystem installiert und konfiguriert haben.
- Muss Klist auf dem Linux-Betriebssystem installiert und konfiguriert sein.
Die Datei "mssql-jdbc_auth-version-arch<><>.dll" muss sich in den folgenden Pfaden befinden. Sie können entweder den Pfad ändern und hinzufügen oder die Datei in einen bereits eingerichteten Pfad kopieren.
64-Bit-DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x64\mssql-jdbc_auth-12.4.1.x64.dll
32-Bit-DLL
%Path%;C:\sqljdbc_12.4.1.0_enu\sqljdbc_12.4\enu\auth\x86\mssql-jdbc_auth-12.4.1.x86.dll
Sie müssen auch eine Jaas.conf-Datei erstellen. Standardmäßig ist diese Datei nicht mit dem Treiber enthalten und wird nicht mit Java installiert. Verwenden Sie eine der folgenden Methoden, um die Umgebung beim Suchen dieser Datei zu unterstützen:
Notiz
Die Datei Jaas.conf ermöglicht Java die Verwendung des aktuellen Kontexts des angemeldeten Benutzers. Außerdem wird Java aufgefordert, die derzeit zwischengespeicherten Kerberos-Tickets zu verwenden.
Ändern Sie die folgende Zeile in der Datei "Java.Security ":
# Default login configuration file login.config.url.1=C:=\<Path to the File>\jaas.conf
Fügen Sie alternativ die Datei Jaas.conf über einen Parameter hinzu, wenn Sie Ihre Umgebung oder Anwendung laden. Stellen Sie sicher, dass Sie beim Kompilieren der Java-Datei denselben Parameter verwenden:
javac -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp.java java -Djava.security.auth.login.config=c:\myDirectory\Jaas.conf myapp
Um eine Verbindung mit einem SQL Server mithilfe der integrierten Kerberos-Authentifizierung herzustellen, konfigurieren Sie die Datei "Jaas.conf ":
SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
Verbindungszeichenfolge ist String connectionUrl = "jdbc:sqlserver://<ServerName>:<PortNum>;integratedSecurity=true;Domain=<MyyDomain>;trustServerCertificate=true;javaAuthentication=JavaKerberos;"
Beispielcode
Alle ELEMENTS-Treiber enthalten Beispielcode im Verzeichnis "\sqljdbc_12.4\enu\samples ". Die am häufigsten verwendete Datei befindet sich in \sqljdbc_12.4\enu\samples\connections\ConnectURR.java. Erstellen Sie eine Datei namens ConnectURL.java, oder verwenden Sie ConnectURL.java aus dem Beispiel, das mit dem Treiber bereitgestellt wird.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnectURL {
public static void main(String[] args) {
// Create a variable for the connection string. Base the connection string on the previous examples supplied in the above documentation.
String connectionUrl = "jdbc:sqlserver://ServerName:Port;user=SQLAuthAccount;password=SomePassword;trustServerCertificate=true;";
try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();)
{
String SQL = "SELECT @@version";
ResultSet rs = stmt.executeQuery(SQL);
// Iterate through the data in the result set and display it.
while (rs.next())
{
System.out.println(rs.getString(1));
}
}
// Handle any errors that may have occurred.
catch (SQLException e)
{e.printStackTrace(); }
}
}
TRACE-Treiberablaufverfolgung
Im Allgemeinen möchten wir die Ablaufverfolgung FINEST
immer auf weitere Details festlegen. Es gibt zwei Methoden für die Treiberablaufverfolgung: Programmgesteuertes Aktivieren der Ablaufverfolgung und Aktivieren der Ablaufverfolgung mithilfe der Datei logging.properties.
Wenn Sie die Datei "logging.properties" verwenden, müssen Sie die richtige Umgebung für die Datei "logging.properties" finden. $JAVA_HOME\conf\ und $JAVA_HOME\jre\lib sind zwei mögliche Standorte.
Führen Sie die folgenden Schritte aus, um diese Datei zu konfigurieren:
Ändern Sie die Datei logging.properties , um sicherzustellen, dass sie den folgenden globalen Eigenschaften ähnelt:
############################################################ # Global properties ############################################################ # "handlers" specifies a comma-separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default, we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. handlers= java.util.logging.ConsoleHandler # To also add the FileHandler, use the following line instead. #handlers= java.util.logging.FileHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overridden by a facility-specific level # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= INFO
Handler teilen Java mit, wo die Ausgabe exportiert werden soll. Es gibt zwei Speicherorte, an denen FileHandler in eine Datei schreibt und ConsoleHandler in ein Konsolenfenster schreibt. Die Ausgabe erzeugt viele Daten, daher muss sie in eine Datei geschrieben werden.
Kommentarzeile
#handlers= java.util.logging.ConsoleHandler
Kommentarzeile aufheben
handlers= java.util.logging.FileHandler
Notiz
Legen Sie
.level
diese Einstellung festOFF
, und im Konsolenfenster werden keine Nachrichten angezeigt..level=OFF
Legen Sie die spezifische Dateihandlerprotokollierung fest:
############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ # default file output is in user's home directory. java.util.logging.FileHandler.pattern = %h/java%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 # Default number of locks FileHandler can obtain synchronously. # This specifies maximum number of attempts to obtain lock file by FileHandler # implemented by incrementing the unique field %u as per FileHandler API documentation. java.util.logging.FileHandler.maxLocks = 100 java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter # Limit the messages that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Example to customize the SimpleFormatter output format # to print one-line log message like this: # <level>: <log message> [<date/time>] # # java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
Ändern Sie diesen Teil, um sicherzustellen, dass er wie folgt aussieht oder die folgenden Zeilen enthält:
java.util.logging.FileHandler.pattern = /Path/java%u.log java.util.logging.FileHandler.limit = 5000000 java.util.logging.FileHandler.count = 20 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.FileHandler.level = FINEST
Ändern Sie die
java.util.logging.FileHandler.pattern = %h/java%u.log
Zeile, und ersetzen%h/
Sie sie durch einen Pfad, den die Datei speichern soll. Zum Beispiel:java.util.logging.FileHandler.pattern = c:/Temp/java%u.log
Festlegen der Treiberprotokollierungsebene:
Fügen Sie unten im folgenden Abschnitt hinzu
com.microsoft.sqlserver.jdbc.level=FINEST
:############################################################ # Facility-specific properties. # Provides extra control for each logger. ############################################################ # For example, set the com.xyz.foo logger to only log SEVERE # messages: # com.xyz.foo.level = SEVERE
Speichern Sie die Änderungen.
Die Datei sollte wie folgt aussehen:
############################################################ # Default Logging Configuration File # # You can use a different file by specifying a filename # with the java.util.logging.config.file system property. # For example, java -Djava.util.logging.config.file=myfile ############################################################ ############################################################ # Global properties ############################################################ # "handlers" specifies a comma-separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # By default we only configure a ConsoleHandler, which will only # show messages at the INFO and above levels. #handlers= java.util.logging.ConsoleHandler # To also add the FileHandler, use the following line instead. handlers= java.util.logging.FileHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overridden by a facility-specific level # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level= OFF ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ # default file output is in user's home directory. java.util.logging.FileHandler.pattern = c:/Temp/java%u.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 # Default number of locks FileHandler can obtain synchronously. # This specifies maximum number of attempts to obtain lock file by FileHandler # implemented by incrementing the unique field %u as per FileHandler API documentation. java.util.logging.FileHandler.maxLocks = 100 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter # Limit the messages that are printed on the console to INFO and above. #java.util.logging.ConsoleHandler.level = INFO #java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter # Example to customize the SimpleFormatter output format # to print one-line log message like this: # <level>: <log message> [<date/time>] # # java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n ############################################################ # Facility-specific properties. # Provides extra control for each logger. ############################################################ # For example, set the com.xyz.foo logger to only log SEVERE # messages: # com.xyz.foo.level = SEVERE com.microsoft.sqlserver.jdbc.level=FINEST
Nach der Wiedergabe des Fehlers können Sie die Änderungen wiederherstellen, um das Erstellen von Dateien zu beenden.
Alternativ können Sie den obigen Text erstellen oder kopieren, in einer Datei speichern und die Datei beim Laden der Anwendung dem Startbefehl hinzufügen.
java -Djava.util.logging.config.file=c:\<Path to the file>\logging.properties myapp
Auf diese Weise können Sie eine Datei "logging.properties " identifizieren, die nicht in den Standardverzeichnissen $JAVA_HOME\conf\
und $JAVA_HOME\jre\lib
über eine Befehlszeile angegeben ist.
Informationen zum Haftungsausschluss von Drittanbietern
Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.