このトピックでは、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 └── samples 3 directories
ODBCドライバーを使用してUNIXまたはLinuxサーバーからPolarDBに接続する
LinuxサーバーにLibtoolをインストールします。 Libtoolのバージョンは1.5.1以降である必要があります。
yum install -y libtoolLinuxサーバーに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 +---------------------------------------+ | 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 );次のコマンドを実行して、ODBCドライバーパッケージを解凍します。
tar -zxvf polardb-odbc.tar.gz次のコマンドを実行して、
polardb-odbcフォルダを開きます。cd polardb-odbcODBCドライバーフォルダーの
samplesフォルダーを開きます。cd samplesサンプルテストをコンパイルします。
Test1とTest2のテストファイルが生成されます。makeTest1と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);
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") ;