Connettersi a Esplora dati di Azure con JDBC
Java Database Connectivity (JDBC) è un'API Java usata per connettersi ai database ed eseguire query. È possibile usare JDBC per connettersi a Esplora dati di Azure. Questa funzionalità è resa possibile dall'endpoint conforme al TDS di Azure Esplora dati, che emula Microsoft SQL Server. L'endpoint supporta la versione TDS 7.x e 8.0.
Per altre informazioni, vedere la panoramica sull'emulazione SQL Server in Azure Esplora dati.
Connettersi con JDBC
La procedura seguente descrive come usare JDBC per connettersi ad Azure Esplora dati.
Creare un'applicazione con
mssql-jdbc
JAR,adal4j
JAR e tutte le relative dipendenze. Di seguito è riportato un elenco di dipendenze necessarie quando si usa la versione di e la7.0.0
versione diadal4j
.1.6.3
mssql-jdbc
mssql-jdbc-7.0.0.jre8.jar adal4j-1.6.3.jar accessors-smart-1.2.jar activation-1.1.jar asm-5.0.4.jar commons-codec-1.11.jar commons-lang3-3.5.jar gson-2.8.0.jar javax.mail-1.6.1.jar jcip-annotations-1.0-1.jar json-smart-2.3.jar lang-tag-1.4.4.jar nimbus-jose-jwt-6.5.jar oauth2-oidc-sdk-5.64.4.jar slf4j-api-1.7.21.jar
Creare un'applicazione per usare la classe driver JDBC com.microsoft.sqlserver.jdbc.SQLServerDriver. È possibile connettersi con un stringa di connessione del formato seguente. Sostituire
<cluster_name.region>
con il nome del cluster e l'area del cluster e<database_name>
con il nome del database.jdbc:sqlserver://<cluster_name.region>.kusto.windows.net:1433;database=<database_name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.kusto.windows.net;loginTimeout=30;authentication=ActiveDirectoryIntegrated
Autenticazione utente JDBC
Di seguito è riportato un esempio di come eseguire l'autenticazione a livello di codice usando Microsoft Entra ID con JDBC per un'entità utente.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import com.microsoft.aad.msal4j.*;
public class Sample {
public static void main(String[] args) throws Exception {
IAuthenticationResult authenticationResult = futureAuthenticationResult.get();
SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<cluster_DNS>");
ds.setDatabaseName("<database_name>");
ds.setHostNameInCertificate("*.kusto.windows.net"); // Or appropriate regional domain.
ds.setAuthentication("ActiveDirectoryIntegrated");
try (Connection connection = ds.getConnection();
Statement stmt = connection.createStatement();) {
ResultSet rs = stmt.executeQuery("<T-SQL_query>");
/*
Read query result.
*/
} catch (Exception e) {
System.out.println();
e.printStackTrace();
}
}
}
Autenticazione dell'applicazione JDBC
Di seguito è riportato un esempio di come eseguire l'autenticazione a livello di codice usando Microsoft Entra ID con JDBC per un'entità applicazione.
import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;
import com.microsoft.aad.msal4j.*;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class Sample {
public static void main(String[] args) throws Throwable {
// Can also use tenant name.
String authorityUrl = "https://login.microsoftonline.com/<tenant_ID>";
Set<String> scopes = new HashSet<>();
scopes.add("https://<cluster_DNS>/.default");
IConfidentialClientApplication clientApplication = ConfidentialClientApplication.builder("<application_client_ID>", ClientCredentialFactory.createFromSecret("<application_key>")).authority(authorityUrl).build();
CompletableFuture<IAuthenticationResult> futureAuthenticationResult = clientApplication.acquireToken(ClientCredentialParameters.builder(scopes).build());
IAuthenticationResult authenticationResult = futureAuthenticationResult.get();
SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<cluster_DNS>");
ds.setDatabaseName("<database_name>");
ds.setAccessToken(authenticationResult.accessToken());
connection = ds.getConnection();
statement = connection.createStatement();
ResultSet rs = statement.executeQuery("<T-SQL_query>");
/*
Read query result.
*/
}
}