Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il driver JDBC (Microsoft Java Database Connectivity) per SQL Server è un driver JDBC di tipo 4 (puro Java, comunica direttamente il protocollo TDS SQL Server, nessuna libreria nativa necessaria) che consente a Java qualsiasi applicazione o server applicazioni di connettersi a SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure e database SQL in Microsoft Fabric. Implementa le API JDBC standard e funziona con i principali server applicazioni Java, tra cui IBM WebSphere e SAP NetWeaver.
Scegliere il punto di partenza
- Per configurare un ambiente di sviluppo Java ed eseguire la prima query, iniziare con il Passaggio 1: Configurare l'ambiente di sviluppo, Passaggio 2: Creare un database SQL e Passaggio 3: Modello di verifica per la connessione a SQL tramite Java.
- Per connettersi a Azure SQL con l'autenticazione senza password, iniziare con Connetti usando l'autenticazione Microsoft Entra e Compilazione dell'URL di connessione.
- Per aggiungere il driver a una build Maven, Gradle o altra, passare a Scarica Microsoft driver JDBC per SQL Server.
- Per rendere un'app esistente resiliente agli errori temporanei, passare a Resilienza della connessione e Logica di ripetizione dei tentativi configurabile.
- Per diagnosticare un problema di connessione o query, vedere Diagnosi dei problemi relativi al driver JDBC e Risoluzione dei problemi di connettività.
Baseline di produzione per Azure SQL
Usare questo frammento di codice come punto di partenza per una connessione Azure SQL orientata alla produzione. Carica il nome del server e il nome del database dalla configurazione dell'applicazione, ad esempio Servizio app di Azure impostazioni dell'app, variabili di ambiente o un file di configurazione e imposta il resto delle proprietà di connessione a livello di codice. La configurazione combina Transport Layer Security (TLS), identità gestita, tentativi di connessione in caso di errori temporanei, ripristino rapido del gruppo di failover, un timeout di accesso più esteso per coprire un failover a freddo e una logica di ripetizione configurabile dei tentativi (CRL) per le istruzioni che incontrano la limitazione delle richieste in Azure SQL o un failover durante l'esecuzione della query.
Per una maggiore sicurezza e maggiore scalabilità orizzontale, mantenere le informazioni di connessione al di fuori del codice. Nell'ambiente di produzione archiviare le informazioni di connessione nel sistema di configurazione dell'applicazione e usare Azure Key Vault per i valori sensibili e le impostazioni di connessione gestite centralmente. Per altre informazioni, vedere Protezione delle stringhe di connessione.
I frammenti di codice Java in questo articolo omettono importazioni e wrapper di classe per brevità.
// 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));
}
}
Questo frammento di codice è ottimizzato per i gruppi di failover di database SQL di Azure e Istanza gestita di SQL di Azure.
Impostare multiSubnetFailover=true solo quando ci si connette a un listener di un gruppo di failover, a un listener di un gruppo di disponibilità o a un endpoint dell'istanza del cluster di failover. L'uso di questa proprietà sugli endpoint che non sono listener a disponibilità elevata può compromettere le prestazioni e non è supportato. Per altre informazioni, vedere Supporto dei driver JDBC per la disponibilità elevata e il ripristino di emergenza.
Il frammento di codice non imposta retryConn perché il driver ritenta già per impostazione predefinita i più comuni errori di connessione temporanei di Azure SQL (inclusi 4060, 40197, 40501, 40613, 49918, 49919, 49920, 10928 e 10929), tramite connectRetryCount e connectRetryInterval. Per l'elenco completo, vedere Elenco degli errori di connessione temporanei predefiniti. Aggiungi retryConn con +<errorNumber> solo quando devi estendere l'elenco con un errore non ancora previsto, oppure impostalo su <errorNumber> (senza + iniziale) per sostituirlo. Se si inserisce lo stesso valore in un URL JDBC, eseguire il wrapping come retryConn={+<errorNumber>} o retryConn={<errorNumber>}.
La retryExec proprietà ha due parti, scritte come rule1;rule2 quando la si imposta a livello di codice. Se inserisci lo stesso valore in un URL JDBC, racchiudi ogni regola tra parentesi graffe come {rule1};{rule2}:
{1205,1222:3,5+5}ritenta le vittime del deadlock (1205) e i timeout delle richieste di blocco (1222) tre volte con un backoff lineare di 5, 10 e 15 secondi. Per 1205, SQL Server esegue il rollback della transazione prima che il driver visualizzi l'errore, quindi la ripetizione di una singola istruzione è sicura. Se l'istruzione che ha causato il deadlock faceva parte di una transazione composta da più istruzioni, anche le istruzioni precedenti sono state annullate e CRL non le riesegue, quindi racchiudi l'intera transazione in un tuo ciclo di nuovi tentativi. 1222 lascia aperta la transazione e il retry a livello di istruzione riesegue solo l'istruzione all'interno della transazione originale; se devi anche limitare la durata della transazione, racchiudi l'intera transazione in un tuo ciclo di nuovi tentativi.{40501,40613,40197,10928,10929,49918:4,5*2}ritenta per quattro volte gli errori di limitazione di Azure SQL, il failover durante la query e gli errori dovuti ai limiti delle risorse, con un backoff esponenziale di 5, 10, 20 e 40 secondi. Questi errori si trovano nell'elenco temporaneo predefinito per il ciclo di connessione , maretryExecè ciò che li intercetta quando generano una query intermedia su una connessione stabilita. I backoff CRL sono vincolati daqueryTimeout. Se si impostaqueryTimeoutsu un valore inferiore al prossimo tempo di attesa previsto, il driver interrompe anticipatamente l'attesa e rilancia l'eccezione. Scegliere un valorequeryTimeoutche sia almeno pari alla somma dei tempi di attesa CRL e del tempo di esecuzione dell'istruzione, oppure accettare che i backoff più lunghi non si attivino.
Per i gruppi di failover di database SQL di Azure, le repliche denominate di Hyperscale e il read scale-out oppure i listener del gruppo di disponibilità Always On, impostare applicationIntent=ReadOnly quando si desidera connettersi a una replica secondaria leggibile. Per i cloud sovrani in cui il Subject Alternative Name (SAN) del certificato non include l'host a cui ti stai connettendo, imposta anche hostNameInCertificate in modo che corrisponda (ad esempio, *.database.usgovcloudapi.net per Azure per enti pubblici).
Per altre informazioni su ogni parte di questa configurazione, vedere:
- Costruzione dell'URL della connessione
- Impostare le proprietà di connessione
- Connettersi con l'autenticazione di Microsoft Entra
- Resilienza della connessione
- Logica di ripetizione dei tentativi configurabile
- Supporto del driver JDBC per il ripristino di emergenza a disponibilità elevata
- Informazioni sulle proprietà di timeout nel driver JDBC
Per il catalogo degli errori temporanei di Azure SQL, vedere Risolvere gli errori di connessione temporanei.
Funzionalità principali
-
JDBC conforme agli standard: driver di tipo 4. La build di JRE 11+ implementa JDBC 4.2, oltre ai metodi di delimitazione delle richieste di JDBC 4.3 (
beginRequest,endRequest) e agli helper di quotaturaStatement. Le API di partizionamento orizzontale di JDBC 4.3 (setShardingKey, lacreateConnectionBuilderfamiglia) generanoSQLFeatureNotSupportedException. La build JRE 8 implementa JDBC 4.2. Per la suddivisione per versione e l'elenco completo dei metodi supportati e non supportati 4.3, vedere supporto per le specifiche di Java e JDBC. - Supporto della piattaforma a livello di piattaforma: viene eseguito in qualsiasi piattaforma con una macchina virtuale Java (JVM) supportata, tra cui Windows, Linux e macOS.
-
Crittografato per impostazione predefinita: connessioni con crittografia TLS con
encrypt=truecome impostazione predefinita per i driver correnti. - Autenticazione di Microsoft Entra ID: connessioni senza password con identità gestita, entità servizio, autenticazione interattiva, autenticazione integrata, catena di credenziali predefinita e flussi di token di accesso.
- Kerberos: autenticazione integrata per Active Directory locale.
- NTLM: autenticazione challenge/response di Windows per scenari senza dominio o legacy.
- Always Encrypted: crittografia lato client per colonne sensibili, con enclave sicure facoltative per operazioni eseguite sul posto.
-
Copia in blocco: inserimenti ad alta velocità effettiva con l'API
SQLServerBulkCopye prestazioni per l'inserimento in batch perexecuteBatch. -
Resilienza della connessione: tentativi di connessione predefiniti per gli errori temporanei, oltre alla logica di ripetizione dei tentativi configurabile esplicitamente per le istruzioni () e a un elenco di errori di connessione personalizzabile (
retryExecretryConn). - Supporto completo dei tipi di dati di SQL Server: datetimeoffset, sql_variant, JSON, tipi spaziali, vettoriali, parametri con valori di tabella e tipi definiti dall'utente.
Get started
| Article | Descrizione |
|---|---|
| Requisiti di sistema | Versioni di Java, sistema operativo e SQL Server supportate. |
| Matrice di supporto | Matrice di compatibilità dettagliata per le versioni dei driver JDBC. |
| Scaricare Microsoft JDBC Driver per SQL Server | Link per il download, coordinate Maven e artefatti di rilascio. |
| Introduzione al driver JDBC | Installare il driver, configurare l'ambiente ed eseguire la prima query. |
| Panoramica del driver JDBC | Architettura, funzionalità supportate e conformità alle specifiche JDBC. |
Configurazione e connessione
| Article | Descrizione |
|---|---|
| Connessione a SQL Server con il driver JDBC | Aprire una connessione a un'istanza di SQL Server da Java. |
| Connessione a un database SQL di Azure | Connettere un'applicazione Java a database SQL di Azure. |
| Costruzione dell'URL della connessione | Riferimento completo per la sintassi e le proprietà dell'jdbc:sqlserver:// URL. |
| Impostare le proprietà di connessione | Tutte le proprietà di connessione, le impostazioni predefinite e come impostarle. |
| Impostazione delle proprietà dell'origine dati | Configurare SQLServerDataSource per l'uso con JNDI e server app. |
| Uso di una connessione | Aprire, riutilizzare e chiudere correttamente le connessioni. |
| Utilizzo del pooling delle connessioni | Origini dati JNDI e integrazione con pool esterni. |
| Resilienza della connessione | Tentativi di connessione predefiniti e rilevamento di connessioni interrotte. |
| Logica di ripetizione dei tentativi configurabile | Ripetere le istruzioni non riuscite con retryExec e personalizzare l'elenco di tentativi di connessione con retryConn. |
| Informazioni sulle proprietà di timeout nel driver JDBC |
loginTimeout, queryTimeout, i timeout dei socket e come interagiscono. |
| Distribuzione del driver JDBC | Crea un pacchetto e distribuisci il driver con l'applicazione. |
Authenticate
| Article | Descrizione |
|---|---|
| autenticazione Microsoft Entra | Identità gestita, entità servizio, autenticazione interattiva, integrata e token di accesso. |
| Autenticazione integrata Kerberos | Connettersi con Kerberos e Active Directory. |
| Autenticazione NTLM | Usare le credenziali NTLM per l'autenticazione. |
| Autenticazione del certificato client per scenari di loopback | Autenticare i client con certificati nelle connessioni loopback. |
Sicurezza
| Article | Descrizione |
|---|---|
| Protezione delle applicazioni del driver JDBC | Indicazioni sulla sicurezza per Java applicazioni che usano il driver. |
| Sicurezza delle applicazioni | Modello di minaccia e raccomandazioni approfondite per la difesa. |
| Protezione delle stringhe di connessione | Tenere le credenziali e le stringhe di connessione fuori dal codice sorgente. |
| Configurazione del client per la crittografia | Attendibilità delle radici, dell'aggiunta di certificati e delle impostazioni TLS. |
| Connessione con la crittografia | Forzare encrypt=true e convalidare il certificato del server. |
| Informazioni sul supporto della crittografia | Come il driver negozia TLS con SQL Server. |
| Validazione dell'input utente | Parametrizzare le query SQL ed evitare gli attacchi di SQL injection. |
| Modalità FIPS | Eseguite il driver in ambienti conformi agli standard FIPS. |
| Always Encrypted | Configurare la crittografia lato client per le colonne sensibili. |
| Always Encrypted con enclave protette | Abilitare operazioni avanzate sulle colonne crittografate. |
| Informazioni di riferimento sulle API Always Encrypted | Set di API per i provider per la crittografia delle colonne e gli archivi di chiavi. |
Uso dei dati
| Article | Descrizione |
|---|---|
| Gestione delle istruzioni e dei set di risultati | Nozioni di base di Statement, PreparedStatement e set di risultati. |
| Uso delle istruzioni con il driver JDBC | Eseguire istruzioni parametrizzate e non parametrizzate. |
| Gestione delle istruzioni complesse | Stored procedure, risultati multipli e conteggi degli aggiornamenti. |
| Uso dei set di risultati | Iterare, aggiornare e scorrere i risultati della query. |
| Uso di più set di risultati | Gestire le query che restituiscono più set di risultati. |
| Informazioni sui tipi di cursore | Cursori solo in avanti, a scorrimento e aggiornabili. |
| Uso di parametri con valori di tabella | Passa TABLE parametri alle stored procedure. |
| Uso della copia in blocco con il driver JDBC | Inserimenti con velocità effettiva elevata con SQLServerBulkCopy. |
| API di copia in blocco per l'inserimento in batch | Accelera executeBatch per i carichi di lavoro INSERT. |
| Esecuzione di operazioni batch | Inserimenti, aggiornamenti ed eliminazioni in batch. |
Tipi di dati
| Article | Descrizione |
|---|---|
| Uso dei tipi di dati | Eseguire il mapping dei tipi di Java ai tipi SQL Server. |
| Informazioni sui tipi di dati del driver JDBC | Sistema dei tipi del driver e mapping JDBC. |
| Conversioni dei tipi di dati | Conversioni implicite ed esplicite tra Java e SQL Server. |
| Differenze tra i tipi di dati | Casi limite nella mappatura dei tipi attraverso il confine. |
| Tipo di dati JSON | Memorizzare e interrogare colonne JSON. |
| Tipi di dati spaziali | Usare la geometria e l'area geografica da Java. |
| tipo di dati vettoriale | Usa il tipo SQL Server vector. |
| sql_variant | Leggere e scrivere sql_variant colonne. |
| Tipi definiti dall'utente | Usare tipi CLR definiti dall'utente da Java. |
| Supporto per set di caratteri nazionali | Gestione Unicode e colonne nvarchar. |
| Funzionalità internazionali | Considerazioni sulle impostazioni locali, sulle regole di confronto e sulla globalizzazione. |
Transazioni e concorrenza
| Article | Descrizione |
|---|---|
| Esecuzione di transazioni |
commit, rollback e la semantica del commit automatico. |
| Informazioni sulle transazioni | Ciclo di vita delle transazioni e procedure consigliate. |
| Livelli di isolamento | Snapshot, read committed, serializable, e altri. |
| Controllo della concorrenza | Strategie di concorrenza ottimistica e pessimistica. |
| Blocco di riga | Come SQL Server accetta e rilascia i blocchi di riga. |
| Uso dei punti di salvataggio | Rollback parziale all'interno di una transazione. |
| Gestione delle dimensioni delle transazioni | Regolare l'ambito della transazione per evitare blocchi di lunga durata. |
| Transazioni XA | Commit a due fasi con SQLServerXADataSource. |
Prestazioni e affidabilità
| Article | Descrizione |
|---|---|
| Miglioramento delle prestazioni e dell'affidabilità | Ottimizzazione a livello di indice, query e driver. |
| Memorizzazione nella cache dei metadati del prepared statement | Riutilizzare i piani di istruzione preparati. |
| Prestazioni dei parametri di istruzioni preparate | Tipizzazione dei parametri e riutilizzo del piano di esecuzione. |
| Buffering adattivo | Trasmettere colonne di grandi dimensioni senza caricarle completamente in memoria. |
| Chiusura di oggetti quando non sono in uso | Libera prontamente le risorse Statement, ResultSet e Connection. |
| Disponibilità elevata e ripristino di emergenza | Listener del gruppo di disponibilità e failover su più subnet. |
| Mirroring del database | Usare il driver con i partner di mirroring del database. |
Diagnosticare e risolvere i problemi
| Article | Descrizione |
|---|---|
| Diagnosi dei problemi relativi al driver JDBC | Traccia, registrazione e modalità di errore comuni. |
| Risoluzione dei problemi di connettività | Errori di connessione, errori durante l'handshake TLS e istanze con nome. |
| Tracciamento del funzionamento del driver | Abilitare la registrazione JDK per il driver. |
| Logger delle prestazioni e callback | Acquisisci le metriche di prestazione per ogni istruzione. |
| Registro eventi estesi | Correlare gli errori del client con gli eventi estesi sul lato server. |
| Gestione degli errori |
SQLException, codici di errore e suggerimenti per riprovare. |
Attività correlate
| Article | Descrizione |
|---|---|
| Note di rilascio | Cronologia delle versioni e novità di ogni versione. |
| Dipendenze delle funzionalità | Dipendenze facoltative per Entra ID, Kerberos, Always Encrypted e altri. |
| Conformità di JDBC 4.3 | Conformità api JDBC 4.3. |
| Conformità di JDBC 4.2 | Conformità api JDBC 4.2. |
| Conformità di JDBC 4.1 | Conformità api JDBC 4.1. |
| Conformità e legalità | Conformità e licenze specifiche. |
| Riferimento API del driver JDBC | Classi, interfacce, metodi e campi esposti dal driver. |
| Applicazioni di esempio del driver JDBC | Esempi di codice end-to-end. |
| Domande frequenti | Domande frequenti. |