Dela via


Ansluta till Azure Data Explorer med JDBC

Java Database Connectivity (JDBC) är ett Java-API som används för att ansluta till databaser och köra frågor. Du kan använda JDBC för att ansluta till Azure Data Explorer. Den här funktionen möjliggörs av Azure Data Explorer SDS-kompatibla slutpunkt, som emulerar Microsoft SQL Server. Slutpunkten stöder TDS-versionerna 7.x och 8.0.

Mer information finns i översikten över SQL Server emulering i Azure Data Explorer.

Ansluta med JDBC

Följande steg beskriver hur du använder JDBC för att ansluta till Azure Data Explorer.

  1. Skapa ett program med mssql-jdbc JAR, adal4j JAR och alla deras beroenden. Följande är en lista över beroenden som krävs när du använder 7.0.0 versionen av mssql-jdbc och 1.6.3 versionen av 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. Skapa ett program för att använda JDBC-drivrutinsklassen com.microsoft.sqlserver.jdbc.SQLServerDriver. Du kan ansluta med en anslutningssträng med följande format. Ersätt <cluster_name.region> med klusternamnet och klusterregionen och <database_name> med databasnamnet.

    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-användarautentisering

Följande är ett exempel på hur du programmatiskt autentiserar med hjälp av Microsoft Entra-ID med JDBC för ett användarhuvudnamn.

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-programautentisering

Följande är ett exempel på hur du programmatiskt autentiserar med hjälp av Microsoft Entra-ID med JDBC för ett programhuvudnamn.

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