すべてのプロダクト
Search
ドキュメントセンター

:アプリケーションを使用して、Babelfishを有効にしたApsaraDB RDS for PostgreSQLインスタンスに接続する

最終更新日:Jan 16, 2024

このトピックでは、C# 、Java、Python、またはCアプリケーションを使用して、Tabular Data Stream (TDS) ポートを介してBabelfishが有効になっているApsaraDB RDS for PostgreSQLインスタンスに接続する方法について説明します。

前提条件

準備

  1. RDSインスタンスに接続します。 詳細については、「クライアントを使用した接続の確立」をご参照ください。
  2. テストデータベースを作成します。
    データベースsqlserverdbを作成します。
    説明 Single-DB移行モードを使用する場合、作成できるデータベースは1つだけです。 データベースを作成した場合、別のデータベースを作成することはできません。 移行モードの詳細については、「Babelfishのステータスの表示」をご参照ください。
  3. テストテーブルを作成します。
    USE sqlserverdb
    GO
    
    CREATE TABLE dbo.tb_test (
        id int not null IDENTITY(1,1) PRIMARY KEY,
        名前varchar (50)
    GO 

C# アプリケーションを使用してRDSインスタンスに接続する

この例では、C# アプリケーションはWindows Serverシステムで構成されています。 他のオペレーティングシステムでC# アプリケーションを構成する方法の詳細については、公式のチュートリアルを参照してください。NETdocumentation

環境準備

. NET 6 SDK (64ビット) がインストールされています。 詳細は、ダウンロードをご参照ください。. NET

手順

  1. Windows Serverデスクトップで、Win + Qキーを押して検索ボックスを開き、cmdと入力し、enterキーを押してコマンドプロンプトを開きます。 次に、次のコマンドを実行してプロジェクトを作成します。
    dotnet new console -o <プロジェクトの名前> -f net6.0
    Create a project
  2. プロジェクトが存在するディレクトリに移動し、Program.csファイルを編集します。
    ディレクトリは、手順1のコマンド出力から取得できます。 この例では、C:\Users\Administrator\MyApp\ ディレクトリが使用されています。 Edit the Program.cs file
  3. 次のサンプルコードをコピーして、Program.csファイルに貼り付けます。
    システムを使用して;
    System.Collections.Generic; の使用
    System.Linqを使用する。System.Textを使用する。System.Threading.Tasksを使用します。System.Data.SqlClientを使用する。名前空間のサンプル
    {
        class Program
        {
            static void Main(string[] args)
            {
                // MSSQL資格情報の設定
                SqlConnection con;
    
                // エンドポイント、TDSポート、Babelfishアカウントのユーザー名とパスワード、およびRDSインスタンスへの接続に使用されるデータベースの名前を設定します。 
                string conString = "Server=" + @ "pgm-**** .pg.rds.aliyuncs.com、1433" + ";" +
                                   "User id=" + "babelfish_user" + ";" +
                                   "Password=" + "babelfish_pwd" + ";" +
                                   "Database=" + "sqlserverdb" + ";" +
                                   "MultipleActiveResultSets=true;";
    
                con=新しいSqlConnection(conString);
                SqlCommand cmd=新しいSqlCommand();
    
                // MSSQL接続の作成
                try
                {
                    con. オープン ();
                    Console.WriteLine("Connection established\n") ;
                }
                キャッチ
                {
                    Console.WriteLine("データベースに接続できません!\n資格情報を確認してください!");
                    環境終了 (1);
                }
    
                文字列sqlQuery = "";
    
                // 値の選択例
                select_all(con);
    
                // トランザクションの例
                // サンプルテーブルに値を挿入する
                cmd = con.CreateCommand();
                SqlTransaction transaction = con.BeginTransaction("SampleTransaction");
    
                try
                {
                    sqlQuery = "dbo.tb_test(name) 値 (@ name) に挿入する";
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = sqlQuery;
                    cmd.Transaction = transaction;
    
                    cmd.Parameters.AddWithValue("@ name", "A");
    
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@ name", "B");
    
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@ name", "C");
    
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@ name", "D");
    
                    cmd.ExecuteNonQuery();
                    transaction.Commit();
    
                    Console.WriteLine("\nInsert successful!\n");
                }
                キャッチ
                {
                    トランザクションRollback();
                    Console.WriteLine("\nInsert failed!\n");
                }
    
                select_all(con);
    
                // 挿入された値の削除
                sqlQuery = "dbo.tb_testから削除";
                cmd = con.CreateCommand();
                cmd.CommandText = sqlQuery;
    
                int row_count = cmd.ExecuteNonQuery();
    
                // メタデータの選択
                // 削除から行数を選択する
                Console.WriteLine("\nDeleted rows: " + row_count + "\n");
    
                // テーブルから列名を選択する
                sqlQuery = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'dbo.tb_test '";
                cmd = con.CreateCommand();
                cmd.CommandText = sqlQuery;
    
                SqlDataReader reader = cmd.ExecuteReader();
    
                文字列値="";
    
                while (reader.Read())
                {
                    value += reader.GetValue(0) + "";
                }
    
                Console.WriteLine (値);
                リーダー。閉じる ();
    
                // 接続を閉じる
                con. 閉じる ();
                Console.WriteLine("\nConnection closed!");
            }
    
            プライベート静的void select_all(SqlConnection con)
            {
                文字列sqlQuery = "select id,name from dbo.tb_test order by id";
                SqlCommand cmd = con.CreateCommand();
                cmd.CommandText = sqlQuery;
                SqlDataReader reader = cmd.ExecuteReader();
    
                while (reader.Read())
                {
                    文字列値="";
                    for (int i = 0; i != reader.FieldCount; i ++)
                    {
                        value += reader.GetValue(i) + "";
                    }
                    Console.WriteLine (値);
                }
    
                リーダー。閉じる ();
            }
    
        }
    }
  4. プロジェクトが存在するディレクトリに移動し、次の依存関係をMyApp.csprojファイルに追加します。
    <ItemGroup>
        <PackageReference Include="System.Data.SqlClient" バージョン="4.8.3" />
    </ItemGroup> 
  5. コマンドプロンプトを開き、プロジェクトが存在するディレクトリに切り替えます。 次に、次のコマンドを実行してC# アプリケーションを実行します。
    cd MyAPP
    dotnet run Program.cs 
    コマンド出力: Command output

Javaアプリケーションを使用してRDSインスタンスに接続する

この例では、JavaプロジェクトはMavenを使用してセットアップされます。

環境準備

Java 1.8以降がインストールされています。

手順

  1. Mavenプロジェクトのpom.xmlファイルに次の依存関係を追加します。
    <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>mssql-jdbc</artifactId>
      <version>9.4.0.jre8</version>
    </dependency> 
  2. Java Database Connectivity (JDBC) 経由でRDSインスタンスに接続します。
    パブリッククラスBabelfishDemo {
        パブリック静的接続getRdsPgConnection(){
            // RDSインスタンスへの接続に使用されるエンドポイント。
            文字列rdsPgConnStr = "pgm-**** .pg.rds.aliyuncs.com";
            // TDSポート。
            文字列rdsPgPort = "1433";
            // データベースの名前。
            文字列databaseName = "sqlserverdb";
            // Babelfishアカウントのユーザー名。
            文字列userName = "babelfish_user";
            // Babelfishアカウントのパスワード。
            文字列パスワード="babelfish_pwd";
    
            String connectionUrl = String.format("jdbc:sqlserver:// % s:% s;databaseName=% s;user=% s;password=% s;connectTimeout=600;socketTimeout=600", rdsPgConnStr, rdsPgPort, databaseName, userName, パスワード);
            Connection connection = null;
            try{
                connection = DriverManager.getConnection(connectionUrl);
            }
            catch (例外例外) {
                exception.printStackTrace();
            }
            リターン接続;
        }
    
        public static void insertRecord(String name, Connection dbConnObj){
            try{
                PreparedStatement stmt = dbConnObj.prepareStatement("dbo.tb_testから削除; dbo.tb_test(name) values(?)" に挿入);
                stmt.setString(1, name);
                stmt.execute();
            } catch (例外) {
                exception.printStackTrace();
            }
        }
    
        public static void queryDataRecords (接続dbConnObj){
            try (Statement stmt = dbConnObj.createStatement()) {
                文字列SQL = "select * from dbo.tb_test order by id;";
                ResultSet rs = stmt.exe cuteQuery(SQL);
    
                // 結果セットのデータを繰り返して表示します。
                while (rs.next()) {
                    System.out.println(rs.getString("id") + "" rs.getString("name"));
                }
            }
            // 発生した可能性のあるエラーを処理します。
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            System.out.println("Babelfish Demo startd .....");
    
            // 接続を取得
            接続dbConnObj = getRdsPgConnection();
    
            // dbにレコードを書き込む
            insertRecord("B" 、dbConnObj);
    
            // データの照会
            queryDataRecords(dbConnObj);
    
            System.out.println("Babelfish Demo Touchdown .....");
        }
    }
    コマンド出力: Command output

Pythonアプリケーションを使用してRDSインスタンスに接続する

この例では、PythonアプリケーションはCentOS 7.9で構成されています。

環境準備

必要な依存関係がインストールされます。
sudo yumインストールgcc gcc-c ++ -y
sudo wget https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo rpm -ivh packages-microsoft-prod.rpm
sudo yumインストールmsodbcsql17.x86_64 -y
sudo pip3インストールpyodbc 

手順

  1. vimコマンドを実行してファイルを作成します。 たとえば、次のコマンドを実行して、main01.pyという名前のファイルを作成できます。
    vim main01.py
  2. iを入力して挿入モードに入ります。 次のサンプルコードをコピーしてmain01.pyファイルに貼り付けます。
    import sys
    osのインポート
    pyodbcをインポートする
    
    
    # エンドポイント、TDSポート、Babelfishアカウントのユーザー名とパスワード、およびRDSインスタンスへの接続に使用されるデータベースの名前を設定します。
    server = 'pgm-***** .pg.rds.aliyuncs.com,1433'
    database = 'sqlserverdb'
    username = 'babelfish_user'
    password = 'babelfish_pwd'
    
    
    # 接続を確立しようとしています
    connection, cursor=なし, なし
    トライ:
        connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+ server +';DATABASE='+ database +';UID='+ username +';PWD='+ password)
        cursor = connection.cursor()
        プリント (「選択例の接続確立!\n」)
    pyodbc.ProgrammingErrorを除く:
        print (「データベースに接続できません!\n資格情報を確認してください! 」)
        exit(1)
    
    
    sql = "insert into dbo.tb_test(name) 値 ('A') 、('B') 、('C') 、('D')"
    cursor.exeかわいい (sql)
    # 値を選択する
    cursor.exe cute("select id,name from dbo.tb_test order by id")
    cursor.fetchall() の行のために:
        プリント (行)
    
    sql = "dbo.tb_testから削除"
    cursor.exeかわいい (sql)
    
    cursor.close()
    connection.close()
    プリント ("\n success!\n") 
  3. Escを押して挿入モードを終了し、:wqと入力してファイルを保存して閉じます。
  4. 次のコマンドを実行して、Pythonアプリケーションを実行します。
    python3 main01.py
    コマンド出力: Command output

Cアプリケーションを使用してRDSインスタンスに接続する

この例では、CアプリケーションはCentOS 7.9で構成されています。

環境準備

必要な依存関係がインストールされます。
sudo yum install freetds freetds-devel unixODBC-devel -y

手順

  1. vimコマンドを実行してファイルを作成します。 たとえば、次のコマンドを実行して、main01.cという名前のファイルを作成できます。
    vim main01.c
  2. iを入力して挿入モードに入ります。 次のサンプルコードをコピーして、main01.cファイルに貼り付けます。
    #include <stdio.h>
    # include <stdlib.h>
    # include <unistd.h>
    # include <sys/param.h>
    # include <sybfront.h>
    # include <sybdb.h>
    # include <syberror.h>
    
    
    # define DBNAME "sqlserverdb" // データベースの名前。
    # define UID "babelfish_user" // Babelfishアカウントのユーザー名。
    # define PWD "babelfish_pwd" // Babelfishアカウントのパスワード。
    # define DBSERVER "pgm-***** .pg.rds.aliyuncs.com" // RDSインスタンスへの接続に使用されるエンドポイント。
    # define TDSPORT 1433
    
    
    /* サーバーからのメッセージからのハンドラー * /
    静的int
    msg_handler(DBPROCESS * dbproc, DBINT msgno, int msgstate, int severity,
        char * msgtext, char * srvname, char * procname, int line)
    {
        /* 通常のエラーはエラーハンドラーによって処理されます * /
        if (重大度 <11)
                fprintf(stderr, "サーバーメッセージ (重大度 % d): % s\n", 重大度, msgtext);
    
        0を返します。}
    
    /* error handler * /
    static int err_handler(DBPROCESS * dbproc, int severity, int dberr, int oserr, char * dberrstr, char * oserrstr)
    {
        fprintf(stderr, "サーバーエラー % d: % s\n", dberr, dberrstr);
        if (oserr != 0)
                fprintf(stderr、"システムエラーの原因 % d: % s\n" 、oserr、oserrstr);
    
        INT_CANCELを返します。}
    
    int main(void)
    {
          LOGINREC * ログイン;
          DBPROCESS * dbconn;
          charホスト名 [MAXHOSTNAMELEN];
          int max_len = MAXHOSTNAMELEN;
          DBCHAR accession[10];
          DBCHARのexamdesc[10];
          DBCHARのexamcode[255];
        char portstr[20];
        int rc;
    
        char sql[65535];
    
    
          if (dbinit() == FAIL)
        {
                fprintf(stderr、"Could not init db.\n");
                return 1;
          }
    
          /* ログインパラメーター構造を割り当てる * /
        if ((login = dblogin()) == FAIL)
        {
            fprintf(stderr, "dblogin() 構造体を初期化できませんでした。\n");
                リターン2;
          }
    
        /* 構造内のログインパラメーターを初期化する * /
        DBSETLUSER (ログイン、UID);
        DBSETLPWD (ログイン、PWD);
        if (gethostname(hostname, max_len) == 0)
        {
                DBSETLHOST (ログイン、ホスト名);
            fprintf(stderr, "setting login hostname: % s\n", hostname);
        }
    
        /* ポートは環境変数を介してのみ設定できます * /
        rc = snprintf(portstr, 20, "TDSPORT=% d", TDSPORT);
        if (rc < 0 | | rc >= 20)
        {
                fprintf(stderr、"環境変数TDSPORT\nのエラー構成文字列");
                return 0;
        }
    
        if (putenv(portstr))! =0)
        {
                fprintf(stderr, "エラー設定TDSPORT環境変数 \n");
                return 0;
        }
    
        /* エラーハンドラのインストール * /
        dberrhandle(err_handler);
        dbmsghandle(msg_handler);
    
        /* DBサーバーに接続する * /
        if ((dbconn = dbopen(login, DBSERVER)) == NULL)
        {
            fprintf(stderr, "DBサーバーに接続できませんでした: % s\n", DBSERVER);
                リターン3;
        }
    
        /* 操作したいデータベースを使用する * /
        if (dbuse(dbconn, DBNAME) == FAIL)
        {
            fprintf(stderr, "データベースを使用できませんでした: % s\n", DBNAME);
                リターン4;
        }
    
        /* sqlを準備する * /
        snprintf(sql、65535、"dbo.tb_test(name) に挿入する値 ('A') 、('B') 、('C') 、('D')");
        if (dbcmd(dbconn, sql) == FAIL)
        {
            fprintf(stderr, "Could not prepare sql: % s\n", sql);
                リターン5;
        }
    
        /* sqlを実行 * /
        if (dbsqlexec(dbconn) == FAIL)
        {
               fprintf(stderr, "Could not execute sql: % s\n", sql);
                戻り6;
        }
    
        /* Judge sql execute result * /
        if (dbresults(dbconn))! =成功)
        {
               fprintf(stderr, "Could not execute sql: % s\n", sql);
                7を返す。
        }
    
        /* sqlを準備する * /
        snprintf(sql、65535、"select id,name from dbo.tb_test order by id");
        if (dbcmd(dbconn, sql) == FAIL)
        {
            fprintf(stderr, "Could not prepare sql: % s\n", sql);
                リターン8;
        }
    
        /* sqlを実行 * /
        if (dbsqlexec(dbconn) == FAIL)
        {
               fprintf(stderr, "Could not execute sql: % s\n", sql);
                9を返す。
        }
    
        /* フェッチsql execute result * /
        int retcode;
        char id[65535];
        char名 [65535];
    
        if ((retcode = dbresults(dbconn)) ! =NO_MORE_RESULTS && retcode == SUCCEED)
        {
            dbbind(dbconn, 1, CHARBIND, (DBCHAR)0, (BYTE *)id);
            dbbind(dbconn, 2, CHARBIND, (DBCHAR)0, (BYTE *)name);
            (dbnextrow(dbconn))! =NO_MORE_ROWS)
            {
                printf("id: % s, name: % s\n", id, name);
            }
        } else
        {
            fprintf(stderr, "sqlの結果を取得できませんでした: % s\n", sql);
                10を返す。
        }
    
        /* sqlを準備する * /
        snprintf(sql、65535、"dbo.tb_testから削除");
        if (dbcmd(dbconn, sql) == FAIL)
        {
            fprintf(stderr, "Could not prepare sql: % s\n", sql);
                11を返す。
        }
    
        /* sqlを実行 * /
        if (dbsqlexec(dbconn) == FAIL)
        {
               fprintf(stderr, "Could not execute sql: % s\n", sql);
                リターン12;
        }
    
        /* Judge sql execute result * /
        if (dbresults(dbconn))! =成功)
        {
               fprintf(stderr, "Could not execute sql: % s\n", sql);
                13を返す。
        }
    
        /* 接続を閉じる * /
        dbclose(dbconn);
    
        printf("success\n");
        0を返します。} 
  3. Escを押して挿入モードを終了し、:wqと入力してファイルを保存して閉じます。
  4. 次のコマンドを実行して、Cアプリケーションを実行します。
    gcc main01.c -lsybdb -o main01
    ./main01 
    コマンド出力: Command output