Condividi tramite


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.

  1. 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 la 7.0.0 versione di adal4j.1.6.3mssql-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
    
  2. 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.
    */
  }
}