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.
Buat aplikasi dengan
mssql-jdbc
JAR,adal4j
JAR, dan semua dependensinya. Berikut ini adalah daftar dependensi yang diperlukan saat menggunakan7.0.0
versimssql-jdbc
dan1.6.3
versiadal4j
.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
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.
*/
}
}