Microsoft JDBC-Treiber für SQL Server

JDBC-Treiber herunterladen

Der Microsoft Java Database Connectivity (JDBC)-Treiber für SQL Server ist ein JDBC-Treiber vom Typ 4 (reines Java, verwendet das SQL Server-TDS-Protokoll direkt, keine nativen Bibliotheken erforderlich), der es jeder Java-Anwendung und jedem Anwendungsserver ermöglicht, eine Verbindung mit SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance und der SQL-Datenbank in Microsoft Fabric herzustellen. Es implementiert die Standard-JDBC-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, Wiederholungsversuche bei vorübergehenden Verbindungsfehlern, eine schnelle Wiederherstellung von Failovergruppen, ein längeres Anmeldezeitlimit, um ein Failover bei einem Kaltstart abzudecken, und konfigurierbare Wiederholungslogik (CRL) für SQL-Anweisungen, die von Azure SQL-Drosselung oder einem Failover während der Abfrage betroffen sind.

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.

Legen Sie multiSubnetFailover=true nur fest, wenn Sie eine Verbindung zu einem Failovergruppenlistener, Verfügbarkeitsgruppenlistener oder Endpunkt einer Failoverclusterinstanz herstellen. Die Verwendung dieser Eigenschaft bei Endpunkten, die keine HA-Listener (High Availability) sind, kann die Leistung beeinträchtigen und wird nicht unterstützt. Weitere Informationen finden Sie unter JDBC-Treiberunterstützung für Hochverfügbarkeit und Notfallwiederherstellung.

Der Codeausschnitt setzt retryConn nicht, da der Treiber die häufigsten vorübergehenden Azure SQL-Verbindungsfehler (einschließlich 4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 und 10929) bereits standardmäßig wiederholt, gesteuert durch connectRetryCount und connectRetryInterval. Die vollständige Liste finden Sie in der Liste der integrierten vorübergehenden Verbindungsfehler. Fügen Sie retryConn mit +<errorNumber> nur dann hinzu, wenn Sie die Liste um einen Fehler ergänzen müssen, der noch nicht erfasst ist, oder setzen Sie es auf <errorNumber> (ohne führendes +), um es zu ersetzen. Wenn Sie denselben Wert in eine JDBC-URL einfügen, umschließen Sie ihn mit retryConn={+<errorNumber>} bzw. retryConn={<errorNumber>}.

Die retryExec Eigenschaft verfügt über zwei Teile, die wie rule1;rule2 beim programmgesteuerten Festlegen geschrieben werden. Wenn Sie den gleichen Wert in einer JDBC-URL angeben, setzen Sie jede Regel wie folgt in geschweifte Klammern: {rule1};{rule2}

  • {1205,1222:3,5+5} wiederholt Deadlockopfer (1205) und Zeitüberschreitungen bei Sperranforderungen (1222) dreimal mit einem linearen Warteintervall 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 von einem Deadlock betroffene Anweisung Teil einer Transaktion mit mehreren Anweisungen war, wurden auch frühere Anweisungen zurückgerollt, und CRL führt sie nicht erneut aus. Deshalb sollten Sie die gesamte Transaktion in Ihre eigene Wiederholungsschleife einschließen. 1222 lässt die Transaktion offen, und die Wiederholung auf Anweisungsebene führt nur die Anweisung innerhalb der ursprünglichen Transaktion erneut aus; wenn Sie auch die Dauer der Transaktion begrenzen müssen, umschließen Sie die gesamte Transaktion mit Ihrer eigenen Wiederholungsschleife.

  • {40501,40613,40197,10928,10929,49918:4,5*2} wiederholt Drosselungsfehler in Azure SQL, Failover während einer Abfrage und Fehler aufgrund von Ressourcenlimits viermal mit exponentiell zunehmenden Wartezeiten von 5, 10, 20 und 40 Sekunden. Diese Fehler stehen in der integrierten Liste vorübergehender Fehler für die connect-Schleife, aber retryExec fängt sie ab, wenn sie mitten in einer Abfrage bei einer bereits bestehenden Verbindung auftreten. CRL-Backoffs sind durch queryTimeout begrenzt. Wenn Sie queryTimeout niedriger als die nächste geplante Wartezeit festlegen, gibt der Treiber vorzeitig auf und löst die Ausnahme erneut aus. Wählen Sie ein queryTimeout, das mindestens so groß ist wie die Summe Ihrer CRL-Wartezeiten und der Laufzeit der Anweisung, oder akzeptieren Sie, dass die längsten Backoffs nicht ausgelöst werden.

Legen Sie für Azure SQL-Datenbank-Failovergruppen, benannte Hyperscale-Replikate und Read Scale-Out oder Always On-Verfügbarkeitsgruppenlistener applicationIntent=ReadOnly fest, wenn Sie bei einem lesbaren sekundären Replikat landen möchten. Für souveräne Clouds, bei denen der Subject Alternative Name (SAN) des Zertifikats den Host, mit dem Sie eine Verbindung herstellen, nicht enthält, legen Sie auch hostNameInCertificate entsprechend fest (zum Beispiel *.database.usgovcloudapi.net für Azure Government).

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

Informationen zum Katalog der vorübergehenden Azure SQL-Fehler finden Sie unter Problembehandlung bei vorübergehenden Verbindungsfehlern.

Wichtigste Funktionen

  • Standardbasiertes JDBC: Typ-4-Treiber. Der JRE-11+-Build implementiert JDBC 4.2 sowie die Request-Boundary-Methoden (beginRequest, endRequest) und die Hilfsfunktionen für die Quotierung mit Statement. JDBC 4.3 Sharding-APIs (setShardingKey, die createConnectionBuilder-Familie) werfen SQLFeatureNotSupportedException. Der JRE-8-Build unterstützt JDBC 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 Unterstützung der Java- und JDBC-Spezifikation.
  • 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, interaktiven, integrierten, Standard-Anmeldeinformationsketten- und Zugriffstoken-Abläufen.
  • Kerberos: Integrierte Authentifizierung für lokales Active Directory.
  • NTLM: Windows Abfrage-/Antwortauthentifizierung für Nichtdomänen- oder Legacyszenarien.
  • Always Encrypted: clientseitige Verschlüsselung für vertrauliche Spalten mit optionalen sicheren Enklaven für Vorgänge direkt an Ort und Stelle.
  • Massenkopieren: Einfügevorgänge mit hohem Durchsatz mit der SQLServerBulkCopy-API und Leistung bei Stapeleinfü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 Unterstützung für SQL Server-Datentypen: datetimeoffset, sql_variant, JSON, räumliche Daten, Vektoren, tabellenwertige Parameter und benutzerdefinierte Typen.

Get started

Artikel Description
Systemanforderungen Unterstützte Java-, Betriebssystem- und SQL Server-Versionen.
Unterstützungsmatrix Detaillierte Kompatibilitätsmatrix für JDBC-Treiberversionen.
Herunterladen des Microsoft JDBC-Treibers für SQL Server Download-Links, Maven-Koordinaten und Release-Artefakte.
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 Funktionen und Konformität mit der JDBC-Spezifikation.

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 Wiederholungsversuche bei Verbindungen und Erkennung unterbrochener Verbindungen.
Konfigurierbare Wiederholungslogik Wiederholen Sie fehlgeschlagene Anweisungen mit retryExec und passen Sie die Liste der Verbindungswiederholungen mit retryConn an.
Grundlagen zu Timeout-Eigenschaften im JDBC-Treiber loginTimeout, queryTimeout, Socket-Zeitüberschreitungen und wie sie zusammenwirken.
Bereitstellen des JDBC-Treibers Paketieren und bereitstellen Sie den Treiber mit Ihrer Anwendung.

Authenticate

Artikel Description
Microsoft Entra-Authentifizierung Verwaltete Identität, Serviceprinzipal, interaktive, integrierte und Zugriffstoken-Authentifizierung.
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 zum Bedrohungsmodell und zur mehrschichtigen Verteidigung.
Sichern von Verbindungszeichenfolgen Bewahren Sie Anmeldeinformationen und Verbindungszeichenfolgen aus dem Quellcode heraus.
Konfigurieren des Clients für die Verschlüsselung Vertrauensanker, Zertifikat-Pinning und TLS-Einstellungen.
Herstellen von Verbindungen mit einer Verschlüsselung Erzwingen Sie encrypt=true und validieren Sie das Serverzertifikat.
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 erweiterte Operationen auf verschlüsselten 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, PreparedStatement und Ergebnismengen.
Verwenden von Statements 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 Abfrageergebnisse durchlaufen, aktualisieren und durchblättern.
Verwenden mehrerer Ergebnismengen Behandeln Sie Abfragen, die mehr als ein Resultset zurückgeben.
Grundlegendes zu Cursortypen Nur-vorwärts-, scrollbare und aktualisierbare Cursor
Verwenden von Tabellenwertparametern Übergeben Sie TABLE Parameter an gespeicherte Prozeduren.
Verwenden von Massenkopieren mit dem JDBC-Treiber Einfügungen mit hohem Durchsatz mit SQLServerBulkCopy.
Massenkopie-API für Batcheinfügung Beschleunigen Sie executeBatch für INSERT-Workloads.
Ausführen von Batchvorgängen Stapelweises Einfügen, Aktualisieren und Löschen.

Datentypen

Artikel Description
Arbeiten mit Datentypen Java-Typen auf SQL-Server-Typen abbilden.
Grundlegendes zu den Datentypen des JDBC-Treibers Treibertyp-System und JDBC-Zuordnungen.
Datentypkonvertierungen Implizite und explizite Konvertierungen zwischen Java und SQL Server.
Unterschiede bei Datentypen Randfälle bei der Zuordnung von Typen über Systemgrenzen hinweg.
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 sql_variant-Spalten lesen und schreiben.
Benutzerdefinierte Typen Verwenden Sie benutzerdefinierte CLR-Typen aus Java.
Unterstützung für nationale Zeichensätze Unicodebehandlung und nvarchar-Spalten.
Internationale Features Überlegungen zu Gebietsschema, Sortierung und Globalisierung.

Transaktionen und Parallelität

Artikel Description
Durchführen von Transaktionen commit, rollback, und Auto-Commit-Semantik.
Grundlegendes zu Transaktionen Transaktionslebenszyklus und bewährte Methoden.
Isolationsstufen Momentaufnahme, zugesichert, serialisierbar und andere.
Nebenläufigkeitskontrolle Optimistische und pessimistische Parallelitätsstrategien.
Zeilensperrung Wie SQL Server Zeilensperren akzeptiert und loslässt.
Verwenden von Sicherungspunkten Teilweises Rollback innerhalb einer Transaktion.
Verwalten des Transaktionsumfangs Passen Sie den Transaktionsbereich an, um lang andauernde 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.
Zwischenspeicherung von Metadaten für vorbereitete Anweisungen Verwenden Sie vorbereitete Anweisungspläne wieder.
Performance von Prepared Statement-Parametern Parametertypisierung und Wiederverwendung von Ausführungsplänen.
Adaptive Pufferung Streamen Sie große Spalten, ohne sie vollständig in den Arbeitsspeicher zu laden.
Schließen von nicht verwendeten Objekten Statement, ResultSet und Connection Ressourcen umgehend freigeben.
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 Tracing, Protokollierung und häufige Fehlermuster.
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 für jede 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.
Abhängigkeiten von Features Optionale Abhängigkeiten für Entra ID, Kerberos, Always Encrypted und andere.
JDBC-4.3-Konformität Konformität mit der JDBC-4.3-API.
JDBC-4.2-Konformität JDBC-4.2-API-Konformität.
JDBC-4.1-Konformität JDBC-4.1-API-Konformität.
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.