Microsoft JDBC-stuurprogramma voor SQL Server

JDBC-stuurprogramma downloaden

Het Microsoft Java JDBC-stuurprogramma (Database Connectivity) voor SQL Server is een type 4 JDBC-stuurprogramma (pure Java, praat rechtstreeks met het SQL Server TDS-protocol, geen systeemeigen bibliotheken vereist) waarmee elke Java toepassing of toepassingsserver verbinding kan maken met SQL Server, Azure SQL Database, Azure SQL Managed Instance en SQL-database in Microsoft Fabric. Het implementeert de standaard JDBC-API's en werkt met belangrijke Java toepassingsservers, waaronder IBM WebSphere en SAP NetWeaver.

Uw beginpunt kiezen

Productiebasislijn voor Azure SQL

Gebruik dit fragment als uitgangspunt voor een productiegerichte Azure SQL-verbinding. De servernaam en databasenaam worden geladen vanuit de toepassingsconfiguratie, zoals Azure App Service app-instellingen, omgevingsvariabelen of een configuratiebestand, en stelt de rest van de verbindingseigenschappen programmatisch in. De configuratie combineert Transport Layer Security (TLS), een beheerde identiteit, herhaalde verbindingspogingen bij tijdelijke storingen, snel herstel van failovergroepen, een langere time-out voor aanmelding om een failover na een koude start op te vangen, en configureerbare logica voor nieuwe pogingen (CRL) voor SQL-instructies die te maken krijgen met Azure SQL-throttling of een failover midden in een query.

Voor een betere beveiliging en eenvoudiger uitschalen houdt u verbindingsgegevens buiten uw code. Sla in productie verbindingsgegevens op in het configuratiesysteem van uw toepassing en gebruik Azure Key Vault voor gevoelige waarden en centraal beheerde verbindingsinstellingen. Zie Verbindingsreeksen beveiligen voor meer informatie.

De Java fragmenten in dit artikel laten import- en klasse-wrappers weg voor beknoptheid.

// 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));
    }
}

Dit fragment is afgestemd op Azure SQL Database failovergroepen en Azure SQL Managed Instance.

multiSubnetFailover=true alleen instellen wanneer u verbinding maakt met een listener van een failovergroep, een listener van een beschikbaarheidsgroep of het eindpunt van een failoverclusterexemplaar. Het gebruik van deze eigenschap voor eindpunten die geen hoge beschikbaarheidslisteners (HA) zijn, kunnen de prestaties schaden en wordt niet ondersteund. Zie ondersteuning voor JDBC-stuurprogramma's voor hoge beschikbaarheid, herstel na noodgevallen voor meer informatie.

In het codefragment wordt retryConn niet ingesteld, omdat het stuurprogramma de meest voorkomende tijdelijke Azure SQL-verbindingsfouten (waaronder 4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 en 10929) standaard al automatisch opnieuw probeert, afhankelijk van connectRetryCount en connectRetryInterval. Zie de lijst met ingebouwde tijdelijke verbindingsfouten voor de volledige lijst. Voeg retryConn alleen toe met +<errorNumber> wanneer u de lijst wilt uitbreiden met een fout die nog niet wordt afgedekt, of stel deze in op <errorNumber> (zonder voorafgaande +) om die te vervangen. Als u dezelfde waarde in een JDBC-URL plaatst, verpakt u deze als retryConn={+<errorNumber>} of retryConn={<errorNumber>}.

De retryExec eigenschap heeft twee delen, geschreven als rule1;rule2 wanneer u deze programmatisch instelt. Als u dezelfde waarde in een JDBC-URL plaatst, verpakt u elke regel in accolades als {rule1};{rule2}:

  • {1205,1222:3,5+5} probeert deadlockslachtoffers (1205) en time-outs bij vergrendelingsaanvragen (1222) drie keer opnieuw, met een lineaire wachttijd van 5, 10 en 15 seconden. Voor 1205 rolt SQL Server de transactie terug voordat het stuurprogramma de fout ziet, dus het opnieuw uitvoeren van één instructie is veilig. Als de instructie die in een deadlock terechtkwam deel uitmaakte van een transactie met meerdere instructies, zijn ook eerdere instructies teruggedraaid en voert CRL deze niet opnieuw uit, dus neem de hele transactie op in uw eigen retrylus. 1222 laat de transactie open en de herhalingspoging op instructieniveau voert alleen de instructie opnieuw uit binnen de oorspronkelijke transactie; als u de duur van de transactie ook wilt begrenzen, plaats dan de hele transactie in uw eigen herhalingslus.

  • {40501,40613,40197,10928,10929,49918:4,5*2} probeert vier keer opnieuw bij Azure SQL-throttling, failover midden in een query en fouten door resourcelimieten, met een exponentiële wachttijd van 5, 10, 20 en 40 seconden. Deze fouten staan in de ingebouwde lijst met tijdelijke fouten voor de connect-lus, maar retryExec vangt ze op wanneer ze midden in een query via een al tot stand gebrachte verbinding optreden. CRL-backoffs worden begrensd door queryTimeout. Als u lager dan de volgende geplande wachttijd instelt queryTimeout , geeft de chauffeur vroeg af en wordt het opnieuw geworpen. Kies een queryTimeout die minstens zo groot is als de som van uw CRL-wachttijden en de uitvoeringstijd van de instructie, of accepteer dat de langste back-offs niet optreden.

Voor failovergroepen van Azure SQL Database, Hyperscale-replica’s met naam en leesschaalvergroting, of Always On-listeners voor beschikbaarheidsgroepen, stelt u applicationIntent=ReadOnly in wanneer u wilt uitkomen op een leesbare secundaire replica. Voor soevereine clouds waarbij de Subject Alternative Name (SAN) van het certificaat niet de host bevat waarmee u verbinding maakt, stelt u ook hostNameInCertificate zo in dat deze overeenkomt (bijvoorbeeld *.database.usgovcloudapi.net voor Azure Government).

Zie voor meer informatie over elk onderdeel van deze configuratie:

Zie Tijdelijke verbindingsfouten oplossen voor de catalogus met Azure SQL tijdelijke fouten.

Belangrijkste kenmerken

  • Op standaarden gebaseerde JDBC: Type 4-stuurprogramma. De JRE 11+-build implementeert JDBC 4.2 plus de JDBC 4.3-methoden voor aanvraaggrenzen (beginRequest, endRequest) en hulpfuncties voor het quoten in Statement. JDBC 4.3-sharding-API’s (setShardingKey, de createConnectionBuilder-familie) werpen SQLFeatureNotSupportedException. De JRE 8-build implementeert JDBC 4.2. Zie voor de uitsplitsing per versie en de volledige lijst met ondersteunde en niet-ondersteunde 4.3-methoden Java- en JDBC-specificatieondersteuning.
  • Brede platformondersteuning: wordt uitgevoerd op elk platform met een ondersteunde Java Virtual Machine (JVM), waaronder Windows, Linux en macOS.
  • Standaard versleuteld: tls-versleutelde verbindingen met encrypt=true als de standaardwaarde voor huidige stuurprogramma's.
  • Microsoft Entra ID-authenticatie: wachtwoordloze verbindingen met beheerde identiteit, service-principal, interactieve, geïntegreerde, standaardketen van aanmeldingsgegevens en toegangstokenstromen.
  • Kerberos: geïntegreerde verificatie voor on-premises Active Directory.
  • NTLM: Windows vraag-/antwoordverificatie voor niet-domein- of verouderde scenario's.
  • Always Encrypted: Versleuteling aan de clientzijde voor gevoelige kolommen, met optionele beveiligde enclaves voor in-place bewerkingen.
  • Bulksgewijs kopiëren: invoegingen met hoge doorvoer met de SQLServerBulkCopy API en prestaties voor batchinvoeging voor executeBatch.
  • Verbindingsweerbaarheid: ingebouwde pogingen om de verbinding opnieuw tot stand te brengen bij tijdelijke fouten, plus optionele configureerbare logica voor opnieuw proberen voor instructies (retryExec) en een aanpasbare lijst met verbindingsfouten (retryConn).
  • Uitgebreide ondersteuning voor SQL Server gegevenstypen: datetimeoffset, sql_variant, JSON, spatial, vector, tabelwaardeparameters en door de gebruiker gedefinieerde typen.

Get started

Article Description
Systeemvereisten Ondersteunde versies van Java, besturingssysteem en SQL Server.
Ondersteuningsmatrix Gedetailleerde compatibiliteitsmatrix voor releases van JDBC-stuurprogramma's.
Microsoft JDBC-stuurprogramma voor SQL Server downloaden Download koppelingen, Maven-coördinaten en releaseartefacten.
Aan de slag met het JDBC-stuurprogramma Installeer het stuurprogramma, configureer uw omgeving en voer uw eerste query uit.
Overzicht van het JDBC-stuurprogramma Architectuur, ondersteunde functies en naleving van JDBC-specificatie.

Configureren en verbinding maken

Article Description
Verbinding maken met SQL Server met het JDBC-stuurprogramma Open een verbinding met een SQL Server exemplaar vanuit Java.
Verbinding maken met een Azure SQL-database Een Java-toepassing verbinden met Azure SQL Database.
De verbindings-URL bouwen Volledige verwijzing voor jdbc:sqlserver:// URL-syntaxis en eigenschappen.
De verbindingseigenschappen instellen Alle verbindingseigenschappen, standaardinstellingen en hoe u deze instelt.
De eigenschappen van de gegevensbron instellen Configureren SQLServerDataSource voor gebruik met JNDI- en app-servers.
Werken met een verbinding Open, hergebruik en sluit verbindingen correct.
Groepsgewijze verbindingen gebruiken JNDI-gegevensbronnen en integratie met externe pools.
Verbindingstolerantie Ingebouwde verbindingsherhaling en detectie van verbroken verbindingen.
Configureerbare logica voor opnieuw proberen Voer mislukte instructies opnieuw uit met retryExec en pas de lijst voor nieuwe verbindingspogingen aan met retryConn.
Inzicht in time-outeigenschappen in het JDBC-stuurprogramma loginTimeout, queryTimeout, sockettimeouts en hoe die op elkaar inwerken.
Het JDBC-stuurprogramma implementeren Verpakt en implementeer het stuurprogramma met uw toepassing.

Authenticate

Article Description
Microsoft Entra-authenticatie Beheerde identiteit, service-principal, interactieve, geïntegreerde en toegangstokenauthenticatie.
Geïntegreerde Kerberos-verificatie Maak verbinding met Kerberos en Active Directory.
NTLM-verificatie Gebruik NTLM-referenties om te verifiëren.
Verificatie van clientcertificaten voor loopback-scenario's Clients authenticeren met certificaten op loopback-verbindingen.

Secure

Article Description
JDBC-stuurprogrammatoepassingen beveiligen Beveiligingsrichtlijnen voor Java toepassingen die gebruikmaken van het stuurprogramma.
Toepassingsbeveiliging Bedreigingsmodel en diepgaande aanbevelingen voor beveiliging.
Verbindingsreeksen beveiligen Referenties en verbindingsreeksen buiten de bron houden.
De client configureren voor versleuteling Vertrouwenswortels, certificaatpinning en TLS-instellingen.
Verbinding maken met versleuteling Forceer encrypt=true en valideer het servercertificaat.
Informatie over versleutelingsondersteuning Hoe het stuurprogramma onderhandelt over TLS met SQL Server.
Gebruikersinvoer valideren Parameters maken voor SQL en injectie voorkomen.
FIPS-modus Voer het stuurprogramma uit in FIPS-compatibele omgevingen.
Altijd versleuteld Configureer versleuteling aan de clientzijde voor gevoelige kolommen.
Always Encrypted met beveiligde enclaves Schakel uitgebreide bewerkingen in voor versleutelde kolommen.
Always Encrypted-API-verwijzing API-oppervlak voor providers voor kolomversleuteling en sleutelarchieven.

Werken met gegevens

Article Description
Werken met opdrachten en resultatensets Basisbeginselen van Statement, PreparedStatementen resultaatsets.
Statements gebruiken met het JDBC-stuurprogramma Voer geparameteriseerde en niet-geparameteriseerde instructies uit.
Complexe uitspraken verwerken Opgeslagen procedures, meerdere resultaten en aantal updates.
Werken met resultaatsets Queryresultaten herhalen, bijwerken en doorlopen.
Meerdere resultatensets gebruiken Query's afhandelen die meer dan één resultatenset retourneren.
Informatie over cursortypen Alleen-voorwaartse, scrollbare en bijwerkbare cursoren.
Parameters met tabelwaarden gebruiken TABLE Parameters doorgeven aan stored procedures.
Bulkkopie gebruiken met het JDBC-stuurprogramma Snelle invoegingen met SQLServerBulkCopy.
API bulksgewijs kopiëren voor batchinvoeging Versnel executeBatch voor INSERT-werklasten.
Batchbewerkingen uitvoeren Bulksgewijs invoegen, bijwerken en verwijderen.

Gegevenstypen

Article Description
Werken met gegevenstypen Wijs Java-typen toe aan de SQL Server-typen.
Informatie over de gegevenstypen van het JDBC-stuurprogramma Systeem- en JDBC-toewijzingen van stuurprogrammatypen.
Conversies van gegevenstypen Impliciete en expliciete conversies tussen Java en SQL Server.
Verschillen in gegevenstype Randgevallen bij het toewijzen van typen over de grens.
JSON-gegevenstype JSON-kolommen opslaan en er query's op uitvoeren.
Ruimtelijke gegevenstypen Gebruik geometrie en geografie uit Java.
Vectorgegevenstype Werk met het SQL Server vectortype.
sql_variant sql_variant-kolommen lezen en schrijven.
Door de gebruiker gedefinieerde typen Gebruik door de gebruiker gedefinieerde CLR-typen uit Java.
Ondersteuning voor nationale tekenset Unicode-verwerking en nvarchar-kolommen.
Internationale functies Overwegingen omtrent land- en taalinstellingen, sorteervolgorde en globalisatie.

Transacties en gelijktijdigheid

Article Description
Transacties uitvoeren commit, rollbacken semantiek voor automatisch doorvoeren.
Inzicht krijgen in transacties Levenscyclus en best practices voor transacties.
Isolatieniveaus Momentopname, vastgelegde, serialiseerbare en andere momentopnamen.
Gelijktijdigheidsbeheer Optimistische en pessimistische concurrencystrategieën.
Rijvergrendeling Hoe SQL Server rijvergrendelingen accepteert en loslaat.
Savepoints gebruiken Gedeeltelijke terugdraaiactie binnen een transactie.
Transactiegrootte beheren Stem het transactiebereik af om langdurige vergrendelingen te voorkomen.
XA-transacties Doorvoer in twee fasen met SQLServerXADataSource.

Prestaties en betrouwbaarheid

Article Description
Prestaties en betrouwbaarheid verbeteren Afstemming op index-, query- en stuurprogrammaniveau.
Metadata van voorbereide instructies cachen Voorbereide instructieplannen opnieuw gebruiken.
Parameterprestaties van voorbereide statement Parametertypering en hergebruik van uitvoeringsplannen.
Adaptieve buffering Grote kolommen streamen zonder ze volledig in het geheugen te laden.
Objecten sluiten wanneer ze niet in gebruik zijn Gratis Statement, ResultSet en Connection-bronnen, direct beschikbaar.
Hoge beschikbaarheid en herstel na noodgevallen Listeners voor beschikbaarheidsgroepen en failover met meerdere subnetten.
Databasespiegeling Gebruik het stuurprogramma met partners voor databasespiegeling.

Diagnosticeren en problemen oplossen

Article Description
Problemen met het JDBC-stuurprogramma vaststellen Tracering, logboekregistratie en veelvoorkomende foutmodi.
Connectiviteitsproblemen oplossen Verbindingsfouten, mislukte TLS-handshakes en benoemde instanties.
Stuurprogrammabewerking traceren Schakel JDK-logboekregistratie in voor het stuurprogramma.
Prestatieregistratie en callback Prestatiestatistieken per statement vastleggen.
Logboek voor uitgebreide gebeurtenissen Clientfouten correleren met uitgebreide gebeurtenissen aan de serverzijde.
Afhandeling van fouten SQLException, foutcodes en hints voor opnieuw proberen.
Article Description
Opmerkingen bij de release Versiegeschiedenis en wat er nieuw is in elke release.
Functieafhankelijkheden Optionele afhankelijkheden voor Entra ID, Kerberos, Always Encrypted en andere.
JDBC 4.3-conformiteit JDBC 4.3 API-conformiteit.
Compatibiliteit met JDBC 4.2 JDBC 4.2 API-conformiteit.
Compatibiliteit met JDBC 4.1 JDBC 4.1 API-conformiteit.
Compliance en juridisch Naleving van specificaties en licentieverlening.
Naslaginformatie over de API voor JDBC-stuurprogramma's Klassen, interfaces, methoden en velden die door het stuurprogramma worden weergegeven.
Voorbeeld van JDBC-stuurprogrammatoepassingen End-to-end-codevoorbeelden.
FAQ Veelgestelde vragen.