このトピックでは、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。 ダウンロードとインストールの詳細については、「概要」をご参照ください。
ドライバをダウンロードする
32ビットx86 UNIXまたはLinuxの場合は、PolarDB-ODBC_Linux_X86_32.tar.gzをダウンロードしてください。
64ビットx86 UNIXまたはLinuxの場合は、PolarDB-ODBC_Linux_X86_64.tar.gzをダウンロードします。
64ビットARM UNIXまたはLinuxの場合は、PolarDB-ODBC_Linux_arm_64.tar.gzをダウンロードしてください。
64ビットx86 Windowsの場合は、PolarDB-ODBC_Windows_x86_64.7zをダウンロードしてください。
32ビットx86 Windowsの場合は、PolarDB-ODBC_Windows_x86_32.7zをダウンロードしてください。
WindowsにODBCドライバーをインストールする
お使いのOSのアーキテクチャとバージョンに適したドライバのインストールパッケージをダウンロードします。 詳細については、「ドライバのダウンロード」をご参照ください。
インストールパッケージを抽出します。
install.bat
ファイルを管理者として実行し、ランダムキーを押して終了します。オプションODBCドライバをアンインストールするには、
uninstall.bat
ファイルを実行します。
ODBCドライバーを使用してWindowsサーバーからPolarDBに接続する
[コントロールパネル] で、[管理ツール] を開きます。
[管理ツール] ページで、[ODBCデータソース] を見つけて実行します。
[ODBCデータソース管理者] ダイアログボックスで、[追加] をクリックします。
データソースのドライバーとしてPOLARDB (UNICODE) を選択し、[完了] をクリックします。
表示されるダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
日付ソース
データソースの名前。
説明
データソースの説明
Datebase
クラスターの名前。
SSLモード
SSLベースの暗号化を有効にするかどうかを指定します。
サーバー
データベースのエンドポイント。 PolarDBクラスターのエンドポイントを確認する方法の詳細については、「エンドポイントの表示または申請」をご参照ください。
プロト
データベースへの接続に使用されるポート。 デフォルト値:1521
ユーザー名
データベースアカウントのユーザー名。
パスワード
データベースアカウントのパスワードを設定します。
[保存] をクリックします。
ODBCドライバをUnixまたはLinuxにインストールする
次のコマンドを実行して、LD_LIBRARY_PATH環境変数を設定します。
のエクスポートLD_LIBRARY_PATH=<PolarDB-ODBC/lib/path>
次のコマンドを実行して、ODBCINI環境変数を設定します。
export ODBCINI=</your odbc.initファイルパス>
OSのアーキテクチャとバージョンに基づいてODBCドライバをダウンロードします。 詳細については、「ドライバのダウンロード」をご参照ください。
ODBCドライバをインストールします。
説明インストールパッケージを解凍した後、ODBCドライバを使用できます。 次のコマンドを実行して、パッケージを解凍します。
tar -zxvf polardb-odbc.tar.gz
次のコードは、ディレクトリ構造を示しています。
â ─ include â ─ ─ lib └ ─ ─ サンプル 6ディレクトリ
ODBCドライバーを使用してUNIXまたはLinuxサーバーからPolarDBに接続する
LinuxサーバーにLibtoolをインストールします。 Libtoolのバージョンは1.5.1以降である必要があります。
yum install -y libtool
LinuxサーバーにunixODBC-develをインストールします。
yum install -y unixODBC-devel
構成した
odbc.ini
ファイルを変更します。vim $ODBCINI
次のコンテンツを
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/userを
target
フォルダーの実際のパスに置き換えます。
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 );
次のコマンドを実行して、ODBCドライバーパッケージを解凍します。
tar -zxvf polardb-odbc.tar.gz
次のコマンドを実行して、
polardb-odbc
フォルダを開きます。cd polardb-odbc
ODBCドライバーフォルダーの
samples
フォルダーを開きます。cdサンプル
サンプルテストをコンパイルします。
Test1
とTest2
のテストファイルが生成されます。作る
Test1
とTest2
を実行します。. /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") ;