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

PolarDB:ODBC

最終更新日:Jun 05, 2024

このトピックでは、Open Database Connectivity (ODBC) ドライバーを使用して、UNIXまたはWindowsアプリケーションをPolarDB for PostgreSQL (Compatible with Oracle) クラスターに接続する方法について説明します。

前提条件

  • PolarDBクラスターのアカウントが作成されました。 詳細については、「データベースアカウントの作成」をご参照ください。
  • PolarDBクラスターに接続するホストのIPアドレスがクラスターのホワイトリストに追加されます。 詳細については、「クラスターのホワイトリストの設定」をご参照ください。
  • Windowsの場合は, OSがWindows 7以降で, Service Pack 1がインストールされていることを確認してください。

  • UNIXまたはLinux OSの场合, 次のツールがインストールされていることを确认してください。

    • Libtool 1.5.10以降。

    • unixODBC-devel。

    • PolarTools。 ダウンロードとインストールの詳細については、「概要」をご参照ください。

ドライバをダウンロードする

WindowsにODBCドライバーをインストールする

  1. お使いのOSのアーキテクチャとバージョンに適したドライバのインストールパッケージをダウンロードします。 詳細については、「ドライバのダウンロード」をご参照ください。

  2. インストールパッケージを抽出します。

  3. install.batファイルを管理者として実行し、ランダムキーを押して終了します。

    Install the ODBC driver in Windows

  4. オプションODBCドライバをアンインストールするには、uninstall.batファイルを実行します。

ODBCドライバーを使用してWindowsサーバーからPolarDBに接続する

  1. [コントロールパネル] で、[管理ツール] を開きます。

  2. [管理ツール] ページで、[ODBCデータソース] を見つけて実行します。

  3. [ODBCデータソース管理者] ダイアログボックスで、[追加] をクリックします。

  4. データソースのドライバーとしてPOLARDB (UNICODE) を選択し、[完了] をクリックします。

  5. 表示されるダイアログボックスで、次のパラメーターを設定します。

    パラメーター

    説明

    日付ソース

    データソースの名前。

    説明

    データソースの説明

    Datebase

    クラスターの名前。

    SSLモード

    SSLベースの暗号化を有効にするかどうかを指定します。

    サーバー

    データベースのエンドポイント。 PolarDBクラスターのエンドポイントを確認する方法の詳細については、「エンドポイントの表示または申請」をご参照ください。

    プロト

    データベースへの接続に使用されるポート。 デフォルト値:1521

    ユーザー名

    データベースアカウントのユーザー名。

    パスワード

    データベースアカウントのパスワードを設定します。

  6. [保存] をクリックします。

ODBCドライバをUnixまたはLinuxにインストールする

  1. 次のコマンドを実行して、LD_LIBRARY_PATH環境変数を設定します。

    LD_LIBRARY_PATH=<PolarDB-ODBC/lib/path>
    のエクスポート
  2. 次のコマンドを実行して、ODBCINI環境変数を設定します。

    export ODBCINI=</your odbc.initファイルパス>
  3. OSのアーキテクチャとバージョンに基づいてODBCドライバをダウンロードします。 詳細については、「ドライバのダウンロード」をご参照ください。

  4. ODBCドライバをインストールします。

    説明

    インストールパッケージを解凍した後、ODBCドライバを使用できます。 次のコマンドを実行して、パッケージを解凍します。

    tar -zxvf polardb-odbc.tar.gz

    次のコードは、ディレクトリ構造を示しています。

    â ─ include
    â ─ ─ lib
    └ ─ ─ サンプル
    
    6ディレクトリ 

ODBCドライバーを使用してUNIXまたはLinuxサーバーからPolarDBに接続する

  1. LinuxサーバーにLibtoolをインストールします。 Libtoolのバージョンは1.5.1以降である必要があります。

    yum install -y libtool
  2. LinuxサーバーにunixODBC-develをインストールします。

    yum install -y unixODBC-devel
  3. 構成したodbc.iniファイルを変更します。

    vim $ODBCINI
  4. 次のコンテンツをodbc.iniファイルに追加します。

    [POLARDB]
    説明=POLARDBのODBC
    Driver = /home/user/target/lib/unix/polardb-odbc.so
    Driver64 = /home/user/target/lib/unix/polardb-odbc.so
    Database = <データベースの名前>
    Servername = <データベースのエンドポイント>
    Password = <パスワード>
    ポート=<ポート番号>
    Username = <Username>
    トレース=はい
    TraceFile = /tmp/odbc.log
    FileUsage = 1 
    説明
    • PolarDBクラスターのエンドポイントを表示する方法の詳細については、「エンドポイントの表示または申請」をご参照ください。

    • 前の例の /home/usertargetフォルダーの実際のパスに置き換えます。

  5. PolarDBに接続します。

    $isql -v POLARDB
    + --------------------------------------- +
    | コネクテッド!                            |
    | |
    | sql-statement |
    | help [tablename] |
    | 終了 |
    | |
    + --------------------------------------- +
    SQL> 

UNIXまたはLinuxの例

次の例は、Test1およびTest2ファイルの実行方法を示しています。

事前にPolarDBデータベースに次のテーブルスキーマを作成し、次のデータを挿入します。

テーブルempを作成します (empno number (4) 、ename varchar2(10) 、仕事varchar2(9) 、mgr番号 (4) 、hiredate日付、sal番号 (7,2) 、comm番号 (7,2) 、deptno番号 (2);

emp値 (7369、'smith' 、'clerk' 、7902、to_date('17-12-1980 '、'dd-mm-yyyy') 、800、null、20) に挿入します。emp値 (7499、'allen' 、'salesman' 、7698、to_date('20-2-1981 '、'dd-mm-yyyy') 、1600、300、30) に挿入します。emp値 (7521、'ward' 、'salesman' 、7698、to_date('22-2-1981' 、'dd-mm-yyyy') 、1250、500、30) に挿入します。emp値 (7566、'jones '、'manager' 、7839、to_date(' 2-4-1981 '、'dd-mm-yyyy') 、2975、null、20) に挿入します。emp値 (7654、'martin' 、'salesman' 、7698、to_date('28-9-1981' 、'dd-mm-yyyy') 、1250、1400、30) に挿入します。emp値 (7698、'blake' 、'manager' 、7839、to_date('1-5-1981' 、'dd-mm-yyyy') 、2850、null、30) に挿入します。emp値 (7782、'clark' 、'manager' 、7839、to_date('9-6-1981' 、'dd-mm-yyyy') 、2450、null、10) に挿入します。emp値に挿入します (7788、'scott' 、'analyst' 、7566、to_date('13-7-1987' 、'dd-mm-rr') - 85、3000、null、20) 。emp値 (7839、'king' 、'president '、null、to_date('17-11-1981' 、'dd-mm-yyyy') 、5000、null、10) に挿入します。emp値 (7844、'turner' 、'salesman '、7698、to_date('8-9-1981' 、'dd-mm-yyyy') 、1500、0、30) に挿入します。emp値に挿入します (7876、'adams' 、'clerk' 、7788、to_date('13-7-1987 '、'dd-mm-rr' ) - 51、1100、null、20) 。emp値 (7900、'james' 、'clerk' 、7698、to_date('3-12-1981 '、'dd-mm-yyyy') 、950、null、30) に挿入します。emp値に挿入します (7902、'ford' 、'analyst' 、7566、to_date('3-12-1981 '、'dd-mm-yyyy') 、3000、null、20) 。emp値に挿入します (7934、'miller' 、'clerk '、7782、to_date('23-1-1982' 、'dd-mm-yyyy') 、1300、null、10 ); 
  1. 次のコマンドを実行して、ODBCドライバーパッケージを解凍します。

    tar -zxvf polardb-odbc.tar.gz
  2. 次のコマンドを実行して、polardb-odbcフォルダを開きます。

    cd polardb-odbc
  3. ODBCドライバーフォルダーのsamplesフォルダーを開きます。

    cdサンプル
  4. サンプルテストをコンパイルします。 Test1Test2のテストファイルが生成されます。

    作る
  5. Test1Test2を実行します。

    . /Test1
    ## Test1を実行します。
    
    ./Test2
    ## テスト2を実行します。
    説明
    • Test1には、追加、削除、更新、およびクエリ操作が実行される例が含まれています。 Test2には、カーソルと出力パラメータを使用する例が含まれています。

    • 次のサンプルコードは、ソースコードのほんの一部です。 完全なソースコードを表示するには、ODBCドライバーパッケージのsamplesフォルダーにあるTest1およびTest2ファイルを確認します。

Test1のサンプルコード:

...

int main(int argc, char * argv[])
{
    /*Initialization*/
    RETCODE rCode;
    HENV *hEnv = (HENV*)malloc(sizeof(HENV));
    HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
    HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
    Connect("POLARDB","user","",&hEnv,&hDBC);
    rCode = SQLAllocStmt(*hDBC,hStmt);
    rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt);
    /*Add, delete, modify, and query operations*/
    ExecuteInsertStatement(&hStmt,(UCHAR*) "INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')");
    ExecuteUpdate(&hStmt,(UCHAR*) "UPDATE EMP SET ENAME='ODBC Test' WHERE EMPNO < 100");
    ExecuteDeletStatement(&hStmt,(UCHAR*) "DELETE FROM EMP WHERE EMPNO<100");
    ExecuteSimple_Select(&hStmt,(UCHAR*) "SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP where empno = 7369");
    /*Disconnection*/
    Disconnect(&hEnv,&hDBC,&hStmt);
    /*clean up*/
    free(hEnv);
    free(hDBC);
    free(hStmt);

    0を返します。} 

Test2 のサンプルコード:

int main(int argc, char * argv[])
{
    /*Definition*/
    RETCODE rCode;
    SQLUSMALLINT a;
    SQLINTEGER Num1IndOrLen;
    SQLSMALLINT iTotCols = 0;

    int j;
    SDWORD cbData;
    /*Initialization*/
    HENV *hEnv = (HENV*)malloc(sizeof(HENV));
    HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
    HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
    HSTMT *hStmt1 = (HSTMT*)malloc(sizeof(HSTMT));
    /**接続を確立する** /
    Connect("POLARDB","user","***",&hEnv,&hDBC);
    rCode = SQLAllocStmt(*hDBC,hStmt);
    rCode = SQLAllocStmt(*hDBC,hStmt1);

    rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt);
    rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt1);
    /*begin*/
    ExecuteSimple_Select(&hStmt1,(UCHAR*) "BEGIN;");
    /*prepare*/
    RETCODE rc = SQLPrepare((*hStmt),(SQLCHAR*)"{ call refcur_inout_callee2(?,?)}",SQL_NTS);

    rc = SQLBindParameter((*hStmt),1, SQL_PARAM_INPUT_OUTPUT, SQL_C_CHAR,SQL_REFCURSOR,0, 31,
                strName, 31, &Num1IndOrLen);
    rc = SQLBindParameter((*hStmt),2, SQL_PARAM_INPUT_OUTPUT, SQL_C_CHAR,SQL_REFCURSOR,0, 31,
                    &strName1, 31, &Num1IndOrLen);

    Num1IndOrLen=0;
    /*execute*/
    rc = SQLExecute((*hStmt));

    if(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
    {
        printf("\nstrName _________ = %s\n",strName);
        printf("\nstrName 1_________ = %s\n",strName1);


    }
    printf("\n OUTパラメータとしての最初のカーソル \n") ;