本ページでは、POLARDB オープンデータベース接続 (ODBC) ドライバーを使用して、Unix または Linux アプリケーションを ApsaraDB for POLARDB クラスターに接続する方法について説明します。

始める前に

  • ApsaraDB for POLARDB クラスターのアカウントが作成されている必要があります。 アカウントの作成方法の詳細については、「データベースアカウントの作成」をご参照ください。
  • ApsaraDB for POLARDB クラスターに接続するホストの IP アドレスをホワイトリストに追加されている必要があります。 詳細については、「POLARDB クラスターのホワイトリストの設定」をご参照ください。
  • POLARDB ODBC ドライバーがインストールされているサーバーは、64 ビット Linux を実行している必要があります。

POLARDB ODBC ドライバーのダウンロード

POLARDB ODBC ドライバーをダウンロードします。

POLARDB ODBC ドライバーのインストール

ApsaraDB for POLARDB は、ODBC ドライバーパッケージを提供しています。 インストールせずに解凍して使用することができます。 次のコマンドを実行して、パッケージを解凍します。

tar -zxvf polardb-odbc.tar.gz

ApsaraDB for POLARDB クラスターへの接続

  1. Linux サーバーに Libtool をインストールします。 libtool はバージョン 1.5.1 以降である必要があります。
    yum install -y libtool
  2. Linux サーバーに unixODBC-devel をインストールします。
    yum install -y unixODBC-devel
  3. /etc ディレクトリの odbcinst.ini ファイルを編集します。
    vim /etc/odbcinst.ini
  4. 以下の情報を odbcinst.ini ファイルに追加します。
    [POLARDB]
    Description = ODBC for POLARDB
    Driver      = /root/target/lib/unix/polar-odbc.so
    Setup       = /root/target/lib/unix/libodbcpolarS.so
    Driver64    = /root/target/lib/unix/polar-odbc.so
    Setup64     = /root/target/lib/unix/libodbcpolarS.so
    Database    = <Database name>
    Servername  = <Endpoint of the ApsaraDB for POLARDB cluster>
    Password    = <Password>
    Port        = <Port>
    Username    = <Username>
    Trace       = yes
    TraceFile   = /tmp/odbc.log
    FileUsage   = 1
    • ApsaraDB for POLARDB クラスターのエンドポイントを照会する方法の詳細については、「エンドポイントの表示」をご参照ください。
    • サンプルコードの /root を、target フォルダーの実際のパスに置き換えます。
  5. ApsaraDB for POLARDB クラスターに接続します。
    $isql -v POLARDB
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL>

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

  1. ODBC ドライバーフォルダーの samples フォルダーを開きます。
    cd samples
  2. サンプルコードをコンパイルします。 Test1 および Test2 のテストファイルが生成されます。
    make
  3. Test1Test2 を実行します。
    . /Test1
    ## Run Test1
    
    . /Test2
    ## Run Test2
    • 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));
    /**Connection establishment**/
    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 First Cursor as OUT Parameter \n") ;