Bagikan melalui


Menyambungkan ke Azure Data Explorer dengan JDBC

Java Database Connectivity (JDBC) adalah Java API yang digunakan untuk menyambungkan ke database dan menjalankan kueri. Anda dapat menggunakan JDBC untuk menyambungkan ke Azure Data Explorer. Fungsionalitas ini dimungkinkan oleh titik akhir yang mematuhi TDS Azure Data Explorer, yang menimulasi microsoft SQL Server. Titik akhir mendukung TDS versi 7.x dan 8.0.

Untuk informasi selengkapnya, lihat gambaran umum tentang emulasi SQL Server di Azure Data Explorer.

Menyambungkan dengan JDBC

Langkah-langkah berikut menjelaskan cara menggunakan JDBC untuk menyambungkan ke Azure Data Explorer.

  1. Buat aplikasi dengan mssql-jdbc JAR, adal4j JAR, dan semua dependensinya. Berikut ini adalah daftar dependensi yang diperlukan saat menggunakan 7.0.0 versi mssql-jdbc dan 1.6.3 versi 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. Buat aplikasi untuk menggunakan kelas driver JDBC com.microsoft.sqlserver.jdbc.SQLServerDriver. Anda bisa tersambung dengan string koneksi format berikut. Ganti <cluster_name.region> dengan nama kluster dan wilayah kluster Anda dan <database_name> dengan nama database Anda.

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

Autentikasi pengguna JDBC

Berikut ini adalah contoh cara mengautentikasi secara terprogram menggunakan ID Microsoft Entra dengan JDBC untuk prinsipal pengguna.

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

Autentikasi aplikasi JDBC

Berikut ini adalah contoh cara mengautentikasi secara terprogram menggunakan ID Microsoft Entra dengan JDBC untuk perwakilan aplikasi.

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