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.
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 die7.0.0
Version vonmssql-jdbc
und1.6.3
verwendet wirdadal4j
.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
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.
*/
}
}