Microsoft JDBC-Treiber für SQL Server

JDBC-Treiber herunterladen

Der Microsoft Java Database Connectivity (DATABASE Connectivity) DRIVER for SQL Server ist ein Type 4 DRIVER (pure Java, spricht das SQL Server TDS-Protokoll direkt, keine nativen Bibliotheken), mit denen Java Anwendungs- oder Anwendungsserver mit SQL Server verbunden werden können, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL-Datenbank in Microsoft Fabric. Er implementiert die STANDARD-AUFGABEN-APIs UND arbeitet mit wichtigen Java Anwendungsservern, darunter IBM WebSphere und SAP NetWeaver.

Auswählen des Startpunkts

Produktionsbasisplan für Azure SQL

Verwenden Sie diesen Codeausschnitt als Ausgangspunkt für eine produktionsorientierte Azure SQL Verbindung. Er lädt den Servernamen und den Datenbanknamen aus der Anwendungskonfiguration, z. B. Azure App Service App-Einstellungen, Umgebungsvariablen oder eine Konfigurationsdatei, und legt die restlichen Verbindungseigenschaften programmgesteuert fest. Die Konfiguration kombiniert Transport Layer Security (TLS), verwaltete Identität, Verbindungswiederholungen bei vorübergehenden Fehlern, schnelle Failovergruppenwiederherstellung, ein längeres Anmeldetimeout, um ein Kaltstart-Failover abzudecken, und konfigurierbare Wiederholungslogik (Retry Logic, CRL) für Anweisungen, die Azure SQL Drosselung oder Mid-Query-Failover getroffen haben.

Um eine höhere Sicherheit und eine einfachere Skalierung zu gewährleisten, behalten Sie Verbindungsinformationen außerhalb Des Codes bei. Speichern Sie in der Produktion Verbindungsinformationen im Konfigurationssystem Ihrer Anwendung, und verwenden Sie Azure Key Vault für vertrauliche Werte und zentral verwaltete Verbindungseinstellungen. Weitere Informationen finden Sie unter Sichern von Verbindungszeichenfolgen.

Die Java Codeausschnitte in diesem Artikel lassen Importe und Klassenwrapper aus Platzgründen weg.

// Load endpoint details from application configuration. In Azure App Service,
// these can come from app settings or Key Vault-backed settings.
String serverName = System.getenv("SQL_SERVER_NAME");
String databaseName = System.getenv("SQL_DATABASE_NAME");
String port = System.getenv().getOrDefault("SQL_PORT", "1433");

if (serverName == null || databaseName == null) {
    throw new IllegalStateException(
            "Set SQL_SERVER_NAME and SQL_DATABASE_NAME in your application configuration.");
}

String url = "jdbc:sqlserver://" + serverName + ":" + port;

Properties props = new Properties();
props.setProperty("databaseName", databaseName);
props.setProperty("encrypt", "true");
props.setProperty("trustServerCertificate", "false");
props.setProperty("authentication", "ActiveDirectoryManagedIdentity");
props.setProperty("loginTimeout", "120");         // 90 is the minimum floor for this retry profile; 120 leaves practical failover margin
props.setProperty("connectRetryCount", "5");     // retry transient connection failures up to 5 times (default 1)
props.setProperty("connectRetryInterval", "15"); // 15 seconds between connection retries (default 10)
props.setProperty("multiSubnetFailover", "true"); // recommended for any Azure SQL HA listener
// props.setProperty("applicationIntent", "ReadOnly"); // uncomment to route to a readable secondary
// Retry deadlocks and lock timeouts, plus Azure SQL throttling and mid-query failover.
props.setProperty("retryExec", "1205,1222:3,5+5;40501,40613,40197,10928,10929,49918:4,5*2");

try (Connection conn = DriverManager.getConnection(url, props);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT 1")) {
    while (rs.next()) {
        System.out.println(rs.getInt(1));
    }
}

Dieser Codeausschnitt ist für Azure SQL-Datenbank Failovergruppen und Azure SQL Managed Instance optimiert.

Wird nur festgelegt multiSubnetFailover=true , wenn Sie eine Verbindung mit einem Failovergruppenlistener, verfügbarkeitsgruppenlistener oder Failoverclusterinstanzenendpunkt herstellen. Die Verwendung dieser Eigenschaft für Endpunkte, die keine HA-Listener (High Availability) sind, können die Leistung beeinträchtigen und werden nicht unterstützt. Weitere Informationen finden Sie unter TREIBERunterstützung für hohe Verfügbarkeit, Notfallwiederherstellung.

Der Codeausschnitt wird nicht festgelegtretryConn, da der Treiber bereits die häufigsten Azure SQL vorübergehenden Verbindungsfehler (einschließlich 4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 und 10929) außerhalb der Box, toriert von connectRetryCount und connectRetryInterval. Die vollständige Liste finden Sie in der Liste der integrierten vorübergehenden Verbindungsfehler. Fügen Sie retryConn nur hinzu +<errorNumber> , wenn Sie die Liste mit einem Fehler erweitern müssen, der noch nicht abgedeckt ist, oder legen Sie sie auf <errorNumber> (keine Führende +) fest, um sie zu ersetzen. Wenn Sie denselben Wert in einer URL DER DATEI ANGEBEN, umschließen Sie ihn wie retryConn={+<errorNumber>} oder retryConn={<errorNumber>}.

Die retryExec Eigenschaft verfügt über zwei Teile, die wie rule1;rule2 beim programmgesteuerten Festlegen geschrieben werden. Wenn Sie denselben Wert in einer URL DER DATEI ANGEBEN, schließen Sie jede Regel in geschweifte Klammern um:{rule1};{rule2}

  • {1205,1222:3,5+5} Wiederholt Deadlock-Opfer (1205) und Sperranforderungstimeouts (1222) dreimal mit einem linearen Backoff von 5, 10 und 15 Sekunden. Für 1205 setzt SQL Server die Transaktion zurück, bevor der Treiber den Fehler sieht. Daher ist das erneute Ausführen einer einzelnen Anweisung sicher. Wenn die Deadlocked-Anweisung Teil einer Multistatement-Transaktion war, wurden frühere Anweisungen ebenfalls zurückgesetzt, und CRL gibt sie nicht wieder, sodass die gesamte Transaktion in Ihrer eigenen Wiederholungsschleife eingeschlossen wird. 1222 lässt die Transaktion geöffnet, und der Wiederholungsversuche auf Anweisungsebene führen nur die Anweisung innerhalb der ursprünglichen Transaktion erneut aus. Wenn Sie auch die Transaktionsdauer binden müssen, schließen Sie die gesamte Transaktion in Ihre eigene Wiederholungsschleife um.

  • {40501,40613,40197,10928,10929,49918:4,5*2}Wiederholt Azure SQL Drosselung, Mid-Query-Failover und Ressourcenlimitfehler viermal mit exponentiellem Backoff von 5, 10, 20 und 40 Sekunden. Diese Fehler befinden sich in der integrierten vorübergehenden Liste für die Verbindungsschleife , aber sie werden abgefangen, retryExec wenn sie mid-query gegen eine hergestellte Verbindung auslösen. CRL-Backoffs sind an queryTimeout. Wenn Sie niedriger als die nächste geplante Wartezeit festlegen queryTimeout , gibt der Fahrer früh auf und erniedrigend. Wählen Sie ein queryTimeout , das mindestens so groß ist, wie die Summe Der CRL wartet plus Anweisungslaufzeit, oder akzeptieren Sie, dass die längsten Backoffs nicht ausgelöst werden.

Bei Azure SQL-Datenbank Failovergruppen legen Hyperscale benannte Replikate und Leseskalenlistener oder AlwaysOn-Verfügbarkeitsgruppenlistener festapplicationIntent=ReadOnly, wenn Sie zu einer lesbaren sekundären Gruppe gelangen möchten. Für souveräne Clouds, bei denen der alternative Antragstellername (Subject Alternative Name, SAN) nicht den Host enthält, mit dem Sie eine Verbindung herstellen, ist auch auf Übereinstimmung festgelegt hostNameInCertificate (z*.database.usgovcloudapi.net. B. für Azure Government).

Weitere Informationen zu den einzelnen Teilen dieser Konfiguration finden Sie unter:

Informationen zum Katalog mit Azure SQL vorübergehenden Fehlern finden Sie unter Problembehandlung bei vorübergehenden Verbindungsfehlern.

Wichtigste Funktionen

  • Standardbasiertes BENCHMARKING: Typ 4 Treiber. Der JRE 11+-Build implementiert SHAPE 4.2 plus die REQUEST-Boundary-Methoden (beginRequest, endRequest) und Statement zitierende Helfer. FEATURES 4.3 sharding APIs (setShardingKey, die createConnectionBuilder Familie) werfen SQLFeatureNotSupportedException. Der JRE 8 Build implementiert BUILDS 4.2. Die Aufschlüsselung pro Version und die vollständige Liste der unterstützten und nicht unterstützten 4.3-Methoden finden Sie unter Java- und VORGANGSspezifikationsunterstützung.
  • Breite Plattformunterstützung: Läuft auf jeder Plattform mit einem unterstützten Java Virtual Machine (JVM), einschließlich Windows, Linux und macOS.
  • Standardmäßig verschlüsselt: TLS-verschlüsselte Verbindungen encrypt=true als Standard für aktuelle Treiber.
  • Microsoft Entra ID Authentifizierung: Kennwortlose Verbindungen mit verwalteter Identität, Dienstprinzipal, interaktiv, integriert, Standardanmeldeinformationskette und Zugriffstokenflüssen.
  • Kerberos: Integrierte Authentifizierung für lokales Active Directory.
  • NTLM: Windows Abfrage-/Antwortauthentifizierung für Nichtdomänen- oder Legacyszenarien.
  • Immer verschlüsselt: Clientseitige Verschlüsselung für vertrauliche Spalten mit optionalen sicheren Enklaven für direkte Vorgänge.
  • Massenkopie: Fügt einen hohen Durchsatz mit der API und der SQLServerBulkCopy Leistung für Batcheinfügungen für executeBatch.
  • Verbindungsresilienz: Integrierte Verbindungsversuche für vorübergehende Fehler sowie konfigurierbare Wiederholungslogik für Anweisungen (retryExec) und eine anpassbare Verbindungsfehlerliste (retryConn).
  • Umfassende SQL Server Datentypunterstützung: datetimeoffset, sql_variant, JSON, spatial, vector, table-valued parameters, and user-defined types.

Get started

Artikel Description
Systemanforderungen Unterstützte Java-, Betriebssystem- und SQL Server-Versionen.
Unterstützungsmatrix Detaillierte Kompatibilitätsmatrix für VERSIONEN VON TREIBERN.
Herunterladen des Microsoft JDBC-Treibers für SQL Server Laden Sie Links, Maven-Koordinaten und Freigabeartefakte herunter.
Erste Schritte mit dem JDBC-Treiber Installieren Sie den Treiber, konfigurieren Sie Ihre Umgebung, und führen Sie die erste Abfrage aus.
Übersicht über den JDBC-Treiber Architektur, unterstützte Features und COMPLIANCE der SPEZIFIKATIONEN VON FEATURES.

Konfigurieren und Verbinden

Artikel Description
Verbinden mit SQL Server mit dem JDBC-Treiber Öffnen Sie eine Verbindung mit einer SQL Server Instanz aus Java.
Herstellen einer Verbindung mit einer Azure SQL-Datenbank Verbinden sie eine Java Anwendung mit Azure SQL-Datenbank.
Erstellen der Verbindungs-URL Vollständige Referenz für jdbc:sqlserver:// URL-Syntax und -Eigenschaften.
Festlegen der Verbindungseigenschaften Alle Verbindungseigenschaften, Standardwerte und deren Festlegung.
Festlegen der Datenquelleneigenschaften Konfigurieren sie SQLServerDataSource für die Verwendung mit JNDI- und App-Servern.
Arbeiten mit einer Verbindung Verbindungen ordnungsgemäß öffnen, wiederverwenden und schließen.
Verwenden von Verbindungspools JNDI-Datenquellen und Integration in externe Pools.
Verbindungsresilienz Integrierte Verbindungsversuche und Erkennung fehlerhafter Verbindungen.
Konfigurierbare Wiederholungslogik Fehler beim Wiederholen von Anweisungen und retryExec Anpassen der Verbindungs-Wiederholungsliste mit retryConn.
Grundlegendes zu Timeouteigenschaften im ELEMENTTREIBER loginTimeout, queryTimeoutSockettimeouts und deren Interaktion.
Bereitstellen des JDBC-Treibers Packen und Bereitstellen des Treibers mit Ihrer Anwendung.

Authenticate

Artikel Description
Microsoft Entra-Authentifizierung Verwaltete Identität, Dienstprinzipal, interaktive, integrierte und Zugriffstokenauthentifizierung.
Integrierte Kerberos-Authentifizierung Stellen Sie eine Verbindung mit Kerberos und Active Directory her.
NTLM-Authentifizierung Verwenden Sie NTLM-Anmeldeinformationen, um sich zu authentifizieren.
Clientzertifikatauthentifizierung für Loopbackszenarien Authentifizieren von Clients mit Zertifikaten für Loopbackverbindungen.

Absichern

Artikel Description
Schützen von JDBC-Treiberanwendungen Sicherheitsleitfaden für Java Anwendungen, die den Treiber verwenden.
Anwendungssicherheit Empfehlungen für Bedrohungsmodell und Verteidigung.
Sichern von Verbindungszeichenfolgen Speichern Sie Anmeldeinformationen und Verbindungszeichenfolgen aus der Quelle.
Konfigurieren des Clients für die Verschlüsselung Vertrauensstellung, Anheften von Zertifikaten und TLS-Einstellungen.
Herstellen von Verbindungen mit einer Verschlüsselung Erzwingen encrypt=true und Überprüfen des Serverzertifikats.
Grundlegendes zur Verschlüsselungsunterstützung Wie der Treiber TLS mit SQL Server aushandelt.
Überprüfen der Benutzereingabe Parametrisieren Sie SQL, und vermeiden Sie die Einfügung.
FIPS-Modus Führen Sie den Treiber in FIPS-kompatiblen Umgebungen aus.
Immer verschlüsselt Konfigurieren sie die clientseitige Verschlüsselung für vertrauliche Spalten.
Immer verschlüsselt mit sicheren Enklaven Aktivieren Sie umfangreiche Vorgänge für verschlüsselte Spalten.
Immer verschlüsselte API-Referenz API-Oberfläche für Spaltenverschlüsselungsanbieter und Schlüsselspeicher.

Mit Daten arbeiten

Artikel Description
Arbeiten mit Anweisungen und Resultsets Grundlagen von Statement, und PreparedStatementResultsets.
Verwenden von Anweisungen mit dem JDBC-Treiber Führen Sie parametrisierte und nicht parametrisierte Anweisungen aus.
Verarbeiten komplexer Anweisungen Gespeicherte Prozeduren, mehrere Ergebnisse und Aktualisierungsanzahlen.
Arbeiten mit Resultsets Durchlaufen, Aktualisieren und Scrollen der Abfrageergebnisse.
Verwenden von mehreren Resultsets Behandeln Sie Abfragen, die mehr als ein Resultset zurückgeben.
Grundlegendes zu Cursortypen Vorwärts-, Bildlauf- und Aktualisierbare Cursor.
Verwenden von Tabellenwertparametern Übergeben Sie TABLE Parameter an gespeicherte Prozeduren.
Verwenden von Massenkopieren mit dem JDBC-Treiber Hohe Durchsatzeinfügungen mit SQLServerBulkCopy.
Massenkopie-API für Batcheinfügung Beschleunigen Sie executeBatchINSERT arbeitslasten.
Ausführen von Batchvorgängen Batch fügt ein, aktualisiert und löscht sie.

Datentypen

Artikel Description
Arbeiten mit Datentypen Ordnen Sie Java Typen SQL Server Typen zu.
Grundlegendes zu den Datentypen des JDBC-Treibers Treibertypsystem und MAPPINGS.
Datentypkonvertierungen Implizite und explizite Konvertierungen zwischen Java und SQL Server.
Unterschiede bei Datentypen Edgefälle beim Zuordnen von Typen über die Grenze.
JSON-Datentyp Json-Spalten speichern und abfragen.
Räumliche Datentypen Verwenden Sie Geometrie und Geografie aus Java.
Vektordatentyp Arbeiten Sie mit dem SQL Server Vektortyp.
sql_variant Lese- und Schreibzugriff sql_variant Spalten.
Benutzerdefinierte Typen Verwenden Sie benutzerdefinierte CLR-Typen aus Java.
Unterstützung für nationale Zeichensätze Unicode-Verarbeitung und nvarchar-Spalten .
Internationale Features Überlegungen zu Gebietsschema, Sortierung und Globalisierung.

Transaktionen und Parallelität

Artikel Description
Durchführen von Transaktionen commit, rollbackund automatische Commit-Semantik.
Grundlegendes zu Transaktionen Transaktionslebenszyklus und bewährte Methoden.
Isolationsstufen Momentaufnahme, zugesichert, serialisierbar und andere.
Nebenläufigkeitskontrolle Optimistische und pessimistische Parallelitätsstrategien.
Zeilensperre Wie SQL Server Zeilensperren akzeptiert und loslässt.
Verwenden von Sicherungspunkten Teilweises Rollback innerhalb einer Transaktion.
Verwalten des Transaktionsumfangs Optimieren Sie den Transaktionsbereich, um lange ausgeführte Sperren zu vermeiden.
XA-Transaktionen Zwei-Phasen-Commit mit SQLServerXADataSource.

Leistung und Zuverlässigkeit

Artikel Description
Verbessern der Leistung und Zuverlässigkeit Optimierung auf Index-, Abfrage- und Treiberebene.
Vorbereitete Zwischenspeicherung von Metadaten für Anweisung Verwenden Sie vorbereitete Anweisungspläne wieder.
Performance von Prepared Statement-Parametern Wiederverwenden von Parametereingaben und Ausführungsplan.
Adaptive Pufferung Streamen Sie große Spalten, ohne sie vollständig in den Arbeitsspeicher zu laden.
Schließen von nicht verwendeten Objekten Kostenlos Statement, ResultSetund Connection Ressourcen umgehend.
Hohe Verfügbarkeit und Notfallwiederherstellung Verfügbarkeitsgruppenlistener und Multisubnetzfailover.
Datenbankspiegelung Verwenden Sie den Treiber mit Datenbankspiegelungspartnern.

Diagnostizieren und Problembehandlung

Artikel Description
Diagnostizieren von Problemen mit dem JDBC-Treiber Ablaufverfolgungs-, Protokollierungs- und gängige Fehlermodi.
Behandlung von Verbindungsproblemen Verbindungsfehler, TLS-Handshakefehler und benannte Instanzen.
Ablaufverfolgung für Treibervorgänge Aktivieren Sie die JDK-Protokollierung für den Treiber.
Leistungsprotokollierung und Rückruf Erfassen Sie Leistungsmetriken pro Anweisung.
Protokoll für erweiterte Ereignisse Korrelieren von Clientfehlern mit serverseitigen erweiterten Ereignissen.
Behandlung von Fehlern SQLException, Fehlercodes und Wiederholungshinweise.
Artikel Description
Veröffentlichungshinweise Versionsverlauf und Neuerungen in jeder Version.
Featureabhängigkeiten Optionale Abhängigkeiten für Entra ID, Kerberos, Always Encrypted und andere.
KONFORMITÄT VON FUNKTION 4.3 KONFORMITÄT DER API 4.3.
KONFORMITÄT VON FUNKTION 4.2 KONFORMITÄT DER API 4.2.
COMPLIANCE VON PROVIDERS 4.1 KONFORMITÄT DER DATEI DATEI 4.1.
Einhaltung und Rechtliches Spezifikationscompliance und Lizenzierung.
API-Referenz für den JDBC-Treiber Klassen, Schnittstellen, Methoden und Felder, die vom Treiber verfügbar gemacht werden.
Beispiele für JDBC-Treiberanwendungen End-to-End-Codebeispiele.
Häufig gestellte Fragen Häufig gestellte Fragen.