Creazione dell'URL di connessione
Il formato generale dell'URL della connessione è
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
Dove:
jdbc:sqlserver:// (obbligatorio) è noto come sottoprotocollo ed è costante.
serverName (facoltativo) indica l'indirizzo del server a cui viene eseguita la connessione. Può trattarsi di un indirizzo DNS o IP oppure di
localhost
o127.0.0.1
per il computer locale. Se non viene specificato nell'URL della connessione, il nome del server deve essere specificato nella raccolta delle proprietà.instanceName (facoltativo) indica l'istanza a cui viene eseguita la connessione su
serverName
. Se non viene specificata alcuna impostazione, la connessione viene eseguita all'istanza predefinita.portNumber (facoltativo) indica la porta a cui viene eseguita la connessione su
serverName
. Il valore predefinito è1433
. Se si usa la porta predefinita, non è necessario specificare nell'URL né la porta né il carattere:
che la precede.Nota
Per una connessione ottimale a un'istanza denominata, si consiglia di impostare un valore per
portNumber
. In questo modo si evita un round trip al server per determinare il numero di porta. Se vengono usati siaportNumber
cheinstanceName
,portNumber
avrà la precedenza einstanceName
verrà ignorato.property (facoltativo) indica una o più proprietà della connessione. Per altre informazioni, vedere Impostazione delle proprietà di connessione. È possibile specificare qualsiasi proprietà presente nell'elenco. Le proprietà, tuttavia, possono essere delimitate solo usando il carattere di punto e virgola (
;
) e non possono essere duplicate.
Attenzione
Per garantire maggiore sicurezza, si consiglia di evitare di costruire l'URL della connessione sulla base dei dati inseriti dall'utente. Nell'URL dovrebbero essere specificati solo il nome del server e il driver. Per i valori relativi a nome utente e password, utilizzare le raccolte delle proprietà della connessione. Per altre informazioni sulla sicurezza nelle applicazioni JDBC, vedere Protezione delle applicazioni del driver JDBC.
Proprietà di connessione
Per un elenco dettagliato delle proprietà che è possibile impostare nella stringa di connessione, vedere Impostazione delle proprietà di connessione.
Esempi di connessioni
Connessione al database predefinito sul computer locale utilizzando un nome utente e la password:
jdbc:sqlserver://localhost;encrypt=true;user=MyUserName;password=<password>;
Nota
Sebbene nell'esempio precedente siano stati utilizzati un nome utente e una password nella stringa di connessione, è consigliabile utilizzare la sicurezza integrata per garantire maggiore protezione. Per altre informazioni, vedere la sezione Connessione con l'autenticazione integrata più avanti in questo articolo.
La stringa di connessione seguente illustra come connettersi a un database di SQL Server tramite l'autenticazione integrata e Kerberos da un'applicazione in esecuzione in qualsiasi sistema operativo supportato da Microsoft JDBC Driver per SQL Server:
jdbc:sqlserver://;servername=server_name;encrypt=true;integratedSecurity=true;authenticationScheme=JavaKerberos
Connessione al database predefinito sul computer locale utilizzando l'autenticazione integrata:
jdbc:sqlserver://localhost;encrypt=true;integratedSecurity=true;
Connessione a un database denominato su un server remoto:
jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;
Connessione alla porta predefinita su un server remoto:
jdbc:sqlserver://localhost:1433;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;
Connessione specificando un nome di applicazione personalizzato:
jdbc:sqlserver://localhost;encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;
Più istanze denominate di SQL Server
SQL Server consente l'installazione di più istanze di database per server. Ogni istanza è identificabile in base a un nome specifico. Per stabilire la connessione a un'istanza denominata di SQL Server, è possibile specificare il numero di porta di tale istanza (metodo preferito). È anche possibile specificare il nome dell'istanza come proprietà URL JDBC o come proprietà datasource. Se non viene specificato né il nome né il numero della porta, viene creata una connessione all'istanza predefinita. Vedere gli esempi seguenti:
Per specificare un numero di porta, usare il formato seguente:
jdbc:sqlserver://localhost:1433;encrypt=true;integratedSecurity=true;<more properties as required>;
Per usare una proprietà dell'URL JDBC, usare il formato seguente:
jdbc:sqlserver://localhost;encrypt=true;instanceName=instance1;integratedSecurity=true;<more properties as required>;
Uso della sequenza di escape dei valori nell'URL della connessione
Se i valori nell'URL di connessione includono caratteri speciali come spazi, punti e virgola e virgolette, è necessario applicare una sequenza di escape. Il driver JDBC supporta l'applicazione di una sequenza di escape racchiudendo i caratteri tra parentesi graffe. Ad esempio con {;}
il carattere di punto e virgola è incluso in una sequenza di escape.
Prima della versione 8.4 i valori a cui è applicata una sequenza di escape possono contenere caratteri speciali (in particolare =
, ;
, []
e lo spazio) ma non parentesi graffe. I valori che contengono parentesi graffe e che devono essere inclusi in una sequenza di escape devono essere aggiunti a una raccolta di proprietà.
Nella versione 8.4 e in quelle successive i valori a cui è applicata una sequenza di escape possono contenere caratteri speciali, incluse le parentesi graffe. Tuttavia, alle parentesi graffe chiuse è necessario applicare una sequenza di escape. Se, ad esempio, una password è pass";{}word
, nella stringa di connessione è necessario applicare alla password la sequenza di escape, come illustrato di seguito:
jdbc:sqlserver://localhost;encrypt=true;username=MyUsername;password={pass";{}}word};
Nota
Lo spazio all'interno delle parentesi graffe è letterale e non viene eliminato.
Connessione con autenticazione integrata su Windows
Il driver JDBC supporta l'utilizzo dell'autenticazione integrata di tipo 2 nei sistemi operativi Windows tramite la proprietà della stringa di connessione integratedSecurity
. Per utilizzare l'autenticazione integrata, copiare il file mssql-jdbc_auth-<version>-<arch>.dll
in una directory nel percorso di sistema di Windows sul computer in cui è installato il driver JDBC.
I file mssql-jdbc_auth-<version>-<arch>.dll
vengono installati nel percorso seguente:
<installation directory>\sqljdbc_<version>\<language>\auth\
Per i sistemi operativi supportati da Microsoft JDBC Driver per SQL Server, vedere Uso dell'autenticazione integrata Kerberos per la connessione a SQL Server per una descrizione di una funzionalità aggiunta in Microsoft JDBC Driver 4.0 per SQL Server che consente a un'applicazione di connettersi a un database tramite l'autenticazione integrata con Kerberos di tipo 4.
Nota
Se si esegue Java Virtual Machine (JVM) a 32 bit, usare il file mssql-jdbc_auth-<version>-<arch>.dll
nella cartella x86, anche se la versione del sistema operativo è x64. Se si esegue JVM a 64 bit in un processore x64, usare i file mssql-jdbc_auth-<version>-<arch>.dll
nella cartella x64.
In alternativa è possibile impostare la proprietà di sistema java.library.path in modo da specificare la directory di mssql-jdbc_auth-<version>-<arch>.dll
. Ad esempio, se il driver JDBC è installato nella directory predefinita, specificare il percorso della DLL utilizzando il seguente argomento della VM (Virtual Machine) quando l'applicazione Java viene avviata:
-Djava.library.path=C:\Microsoft JDBC Driver 6.4 for SQL Server\sqljdbc_<version>\enu\auth\x86
Connessione con indirizzi IPv6
Il driver JDBC supporta l'utilizzo di indirizzi IPv6 con la raccolta delle proprietà di connessione e con la proprietà della stringa di connessione serverName
. Il valore serverName
iniziale, quale jdbc:sqlserver://serverName
, non è supportato nelle stringhe di connessione per gli indirizzi IPv6. L'uso di un nome per serverName
(anziché dell'indirizzo IPv6 non elaborato) nella connessione garantirà il funzionamento corretto in ogni caso. Di seguito sono riportati alcuni esempi.
Per usare la proprietà serverName:
jdbc:sqlserver://;serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1;encrypt=true;integratedSecurity=true;
Per usare la raccolta di proprietà:
Properties pro = new Properties();
pro.setProperty("serverName", "serverName=3ffe:8311:eeee:f70f:0:5eae:10.203.31.9\\instance1");
Connection con = DriverManager.getConnection("jdbc:sqlserver://;encrypt=true;integratedSecurity=true;", pro);