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

PolarDB:ODBC

最終更新日:Apr 10, 2025

このトピックでは、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
    └── samples
    3 directories 

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
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL>

UNIXまたはLinuxの例

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

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

create table emp(empno number(4),
ename varchar2(10),
job varchar2(9),
mgr number (4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2));

insert into emp values(7369,'smith','clerk',7902 ,to_date('17-12-1980','dd-mm-yyyy'),800,null, 20 );
insert into emp values(7499,'allen','salesman',7698 ,to_date('20-2-1981','dd-mm-yyyy'),1600, 300 , 30 );
insert into emp values(7521,'ward' ,'salesman' ,7698 ,to_date(' 22-2-1981' , 'dd-mm-yyyy' ), 1250 , 500 , 30 );
insert into emp values(7566,'jones','manager' , 7839 ,to_date(' 2-4-1981' , 'dd-mm-yyyy' ), 2975 , null , 20 );
insert into emp values(7654,'martin','salesman',7698 ,to_date(' 28-9-1981' , 'dd-mm-yyyy' ), 1250 , 1400 , 30 );
insert into emp values(7698,'blake','manager', 7839 ,to_date(' 1-5-1981' , 'dd-mm-yyyy' ), 2850 , null , 30 );
insert into emp values(7782,'clark','manager', 7839 ,to_date(' 9-6-1981' , 'dd-mm-yyyy' ), 2450 , null , 10 );
insert into emp values(7788,'scott','analyst', 7566 ,to_date(' 13-7-1987' , 'dd-mm-rr ' ) - 85 , 3000 , null , 20 );
insert into emp values(7839,'king', 'president ' , null ,to_date('17-11-1981 ' , 'dd-mm-yyyy' ), 5000 , null , 10 );
insert into emp values(7844,'turner','salesman ' , 7698 ,to_date('8-9-1981 ' , 'dd-mm-yyyy' ), 1500 , 0 , 30 );
insert into emp values(7876,'adams', 'clerk' , 7788 ,to_date('13-7-1987' , 'dd-mm-rr ' ) - 51 , 1100 , null , 20 );
insert into emp values(7900,'james', 'clerk' , 7698 ,to_date('3-12-1981' , 'dd-mm-yyyy' ), 950 , null , 30 );
insert into emp values(7902,'ford', 'analyst' , 7566 ,to_date('3-12-1981' , 'dd-mm-yyyy' ), 3000 , null , 20 );
insert into emp values(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 samples
  4. サンプルテストをコンパイルします。 Test1Test2のテストファイルが生成されます。

    make
  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);

    return 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") ;