Share via


Herstellen einer Verbindung mit Azure Data Explorer mit JDBC

Java Database Connectivity (JDBC) ist eine Java-API, die zum Herstellen einer Verbindung mit Datenbanken und zum Ausführen von Abfragen verwendet wird. Sie können JDBC verwenden, um eine Verbindung mit Azure Data Explorer herzustellen. Diese Funktionalität wird durch den TDS-kompatiblen Endpunkt von Azure Data Explorer ermöglicht, der Microsoft SQL Server emuliert. Der Endpunkt unterstützt die TDS-Versionen 7.x und 8.0.

Weitere Informationen finden Sie in der Übersicht über SQL Server Emulation in Azure Data Explorer.

Herstellen einer Verbindung mit JDBC

In den folgenden Schritten wird beschrieben, wie Sie JDBC zum Herstellen einer Verbindung mit Azure Data Explorer verwenden.

  1. Erstellen Sie eine Anwendung mit mssql-jdbc JAR, adal4j JAR und allen zugehörigen Abhängigkeiten. Im Folgenden ist eine Liste der Abhängigkeiten aufgeführt, die erforderlich sind, wenn die 7.0.0 Version von mssql-jdbc und 1.6.3 verwendet wird adal4j.

    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. Erstellen Sie eine Anwendung, um die JDBC-Treiberklasse com.microsoft.sqlserver.jdbc.SQLServerDriver zu verwenden. Sie können eine Verbindung mit einer Verbindungszeichenfolge des folgenden Formats herstellen. Ersetzen Sie durch <cluster_name.region> Den Clusternamen und die Clusterregion sowie <database_name> durch den Datenbanknamen.

    jdbc:sqlserver://<cluster_name.region>.kusto.windows.net:1433;database=<database_name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.kusto.windows.net;loginTimeout=30;authentication=ActiveDirectoryIntegrated
    

JDBC-Benutzerauthentifizierung

Im Folgenden finden Sie ein Beispiel für die programmgesteuerte Authentifizierung mit Microsoft Entra-ID mit JDBC für einen Benutzerprinzipal.

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

JDBC-Anwendungsauthentifizierung

Im Folgenden finden Sie ein Beispiel für die programmgesteuerte Authentifizierung mit Microsoft Entra ID mit JDBC für einen Anwendungsprinzipal.

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.
    */
  }
}