Programmbasiertes Herstellen einer Verbindung mit Ihrem Cluster - Amazon Redshift

Programmbasiertes Herstellen einer Verbindung mit Ihrem Cluster

In diesem Abschnitt wird beschrieben, wie Sie programmbasiert eine Verbindung mit Ihrem Cluster herstellen. Wenn Sie eine Anwendung wie SQL Workbench/J verwenden, die Ihre Client-Verbindungen für Sie verwaltet, können Sie diesen Abschnitt überspringen.

Herstellen von Verbindungen mit einem Cluster unter Verwendung von Java

Wenn Sie Java verwenden, um programmbasiert Verbindungen mit Ihrem Cluster herzustellen, können Sie dies mit oder ohne Serverauthentifizierung tun. Wenn Sie die Serverauthentifizierung verwenden möchten, folgen Sie den Anweisungen in Konfigurieren von Sicherheitsoptionen für Verbindungen, um das Amazon-Redshift-Serverzertifikat in einem Keystore zu speichern. Sie können den Keystore referenzieren, indem Sie wie folgt eine Eigenschaft angeben, wenn Sie Ihren Code ausführen:

-Djavax.net.ssl.trustStore=<path to keystore> -Djavax.net.ssl.trustStorePassword=<keystore password>

Beispiel Herstellen von Verbindungen mit einem Cluster unter Verwendung von Java

Im folgenden Beispiel werden eine Verbindung mit einem Cluster hergestellt und eine Beispielabfrage ausgeführt, die Systemtabellen zurückgibt. Um dieses Beispiel verwenden zu können, müssen keine Daten in Ihrer Datenbank vorhanden sein.

Wenn Sie ein Serverzertifikat verwenden, um Ihren Cluster zu authentifizieren, können Sie die Zeile, die den Keystore verwendet und auskommentiert ist, wiederherstellen:

props.setProperty("ssl", "true");

Weitere Informationen zum Serverzertifikat finden Sie unter Konfigurieren von Sicherheitsoptionen für Verbindungen.

Eine schrittweise Anleitung für die Ausführung des folgenden Beispiels finden Sie unter Ausführen von Java-Beispielen für Amazon Redshift unter Verwendung von Eclipse.

/** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ // snippet-sourcedescription:[ConnectToClusterExample demonstrates how to connect to an Amazon Redshift cluster and run a sample query.] // snippet-service:[redshift] // snippet-keyword:[Java] // snippet-keyword:[Amazon Redshift] // snippet-keyword:[Code Sample] // snippet-keyword:[Connect] // snippet-keyword:[JDBC] // snippet-sourcetype:[full-example] // snippet-sourcedate:[2019-02-01] // snippet-sourceauthor:[AWS] // snippet-start:[redshift.java.ConnectToCluster.complete] package connection; import java.sql.*; import java.util.Properties; public class ConnectToCluster { //Redshift driver: "jdbc:redshift://x.y.us-west-2.redshift.amazonaws.com:5439/dev"; static final String dbURL = "***jdbc cluster connection string ****"; static final String MasterUsername = "***master user name***"; static final String MasterUserPassword = "***master user password***"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ //Dynamically load driver at runtime. //Redshift JDBC 4.1 driver: com.amazon.redshift.jdbc41.Driver //Redshift JDBC 4 driver: com.amazon.redshift.jdbc4.Driver Class.forName("com.amazon.redshift.jdbc.Driver"); //Open a connection and define properties. System.out.println("Connecting to database..."); Properties props = new Properties(); //Uncomment the following line if using a keystore. //props.setProperty("ssl", "true"); props.setProperty("user", MasterUsername); props.setProperty("password", MasterUserPassword); conn = DriverManager.getConnection(dbURL, props); //Try a simple query. System.out.println("Listing system tables..."); stmt = conn.createStatement(); String sql; sql = "select * from information_schema.tables;"; ResultSet rs = stmt.executeQuery(sql); //Get the data from the result set. while(rs.next()){ //Retrieve two columns. String catalog = rs.getString("table_catalog"); String name = rs.getString("table_name"); //Display values. System.out.print("Catalog: " + catalog); System.out.println(", Name: " + name); } rs.close(); stmt.close(); conn.close(); }catch(Exception ex){ //For convenience, handle all errors here. ex.printStackTrace(); }finally{ //Finally block to close resources. try{ if(stmt!=null) stmt.close(); }catch(Exception ex){ }// nothing we can do try{ if(conn!=null) conn.close(); }catch(Exception ex){ ex.printStackTrace(); } } System.out.println("Finished connectivity test."); } } // snippet-end:[redshift.java.ConnectToCluster.complete]

Herstellen von Verbindungen mit einem Cluster unter Verwendung von .NET

Wenn Sie .NET (C#) verwenden, um programmbasiert Verbindungen mit Ihrem Cluster herzustellen, können Sie dies mit oder ohne Serverauthentifizierung tun. Wenn Sie die Serverauthentifizierung verwenden möchten, folgen Sie den Anweisungen in Konfigurieren von Sicherheitsoptionen für Verbindungen, um das Amazon-Redshift-Serverzertifikat herunterzuladen und anschließend in das korrekte Format für Ihren .NET-Code zu konvertieren.

Beispiel Herstellen von Verbindungen mit einem Cluster unter Verwendung von .NET

Im folgenden Beispiel werden eine Verbindung mit einem Cluster hergestellt und eine Beispielabfrage ausgeführt, die Systemtabellen zurückgibt. Es wird keine Serverauthentifizierung angezeigt. Um dieses Beispiel verwenden zu können, müssen keine Daten in Ihrer Datenbank vorhanden sein. In diesem Beispiel wird der System.Data.Odbc-Namespace verwendet, ein .NET Framework-Datenanbieter für ODBC.

using System; using System.Data; using System.Data.Odbc; namespace redshift.amazon.com.docsamples { class ConnectToClusterExample { public static void Main(string[] args) { DataSet ds = new DataSet(); DataTable dt = new DataTable(); // Server, e.g. "examplecluster.xyz.us-west-2.redshift.amazonaws.com" string server = "***provide server name part of connection string****"; // Port, e.g. "5439" string port = "***provide port***"; // MasterUserName, e.g. "masteruser". string masterUsername = "***provide master user name***"; // MasterUserPassword, e.g. "mypassword". string masterUserPassword = "***provide master user password***"; // DBName, e.g. "dev" string DBName = "***provide name of database***"; string query = "select * from information_schema.tables;"; try { // Create the ODBC connection string. //Redshift ODBC Driver - 64 bits /* string connString = "Driver={Amazon Redshift (x64)};" + String.Format("Server={0};Database={1};" + "UID={2};PWD={3};Port={4};SSL=true;Sslmode=Require", server, DBName, masterUsername, masterUserPassword, port); */ //Redshift ODBC Driver - 32 bits string connString = "Driver={Amazon Redshift (x86)};" + String.Format("Server={0};Database={1};" + "UID={2};PWD={3};Port={4};SSL=true;Sslmode=Require", server, DBName, masterUsername, masterUserPassword, port); // Make a connection using the psqlODBC provider. OdbcConnection conn = new OdbcConnection(connString); conn.Open(); // Try a simple query. string sql = query; OdbcDataAdapter da = new OdbcDataAdapter(sql, conn); da.Fill(ds); dt = ds.Tables[0]; foreach (DataRow row in dt.Rows) { Console.WriteLine(row["table_catalog"] + ", " + row["table_name"]); } conn.Close(); Console.ReadKey(); } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } } } }