オープンデータベースコネクティビティ (ODBC) ドライバーを使用して、Windows または UNIX/Linux アプリケーションを PolarDB for PostgreSQL (Compatible with Oracle) クラスターに接続します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
PolarDB クラスター内のデータベースアカウントです。作成方法については、データベースアカウントの作成をご参照ください。
クラスターのホワイトリストに追加したホストの IP アドレス。 ホワイトリストを設定するには、「クラスターのホワイトリストを設定する」をご参照ください。
Windows のみ: Windows 7 以降(Service Pack 1 がインストール済み)。
UNIX/Linux のみ: 次のツールがインストール済みであること。
Libtool 1.5.10 以降
unixODBC-devel
PolarTools。ダウンロードおよびインストール手順については、「PolarDB-Tools」をご参照ください。
ドライバーのダウンロード
ご利用の OS および CPU アーキテクチャに合致するパッケージをダウンロードします。
| プラットフォーム | アーキテクチャ | ダウンロード |
|---|---|---|
| UNIX/Linux | 32 ビット x86 | PolarDB-ODBC_Linux_X86_32.tar.gz |
| UNIX/Linux | 64 ビット x86 | PolarDB-ODBC_Linux_X86_64.tar.gz |
| UNIX/Linux | 64 ビット ARM | PolarDB-ODBC_Linux_arm_64.tar.gz |
| Windows | 64 ビット x86 | PolarDB-ODBC_Windows_x86_64.7z |
| Windows | 32 ビット x86 | PolarDB-ODBC_Windows_x86_32.7z |
Windows でのインストールと接続
ODBC ドライバーのインストール
ご利用の Windows アーキテクチャに対応するドライバーパッケージをダウンロードします。「ドライバーのダウンロード」をご参照ください。
パッケージを展開します。
管理者権限で
install.batを実行し、任意のキーを押して終了します。
(任意)ドライバーをアンインストールする場合は、
uninstall.batを実行します。
Windows から PolarDB への接続
コントロールパネル を開き、管理ツール に移動します。
ODBC データソース を開きます。
ODBC データソース管理者 ダイアログボックスで、追加 をクリックします。
ドライバーとして PolarDB (UNICODE) を選択し、完了 をクリックします。
データソースのパラメーターを設定します。
パラメーター odbc.iniキーワードデフォルト値 説明 データソース — — データソースの名前 説明 — — データソースの説明 データベース Database— PolarDB クラスターの名前 SSL モード — — SSL 暗号化を有効にするかどうか サーバー Servername— データベースのエンドポイント。エンドポイントの確認方法については、「エンドポイントの表示または申請」をご参照ください。 Prot Port1521 データベースへの接続に使用されるポート ユーザー名 Username— データベースアカウントのユーザー名 パスワード Password— データベースアカウントのパスワード 保存 をクリックします。
UNIX/Linux でのインストールと接続
ODBC ドライバーのインストール
ご利用の Linux アーキテクチャに対応するドライバーパッケージをダウンロードします。「ドライバーのダウンロード」をご参照ください。
パッケージを展開します。
tar -zxvf polardb-odbc.tar.gz展開されたディレクトリには、次の 3 つのサブディレクトリが含まれます。
├── include ├── lib └── samples 3 directoriesドライバーの
libディレクトリを指すように、LD_LIBRARY_PATH環境変数を設定します。export LD_LIBRARY_PATH=<PolarDB-ODBC/lib/path>ODBCINI環境変数を、ご利用のodbc.iniファイルを指すように設定します。export ODBCINI=<your odbc.ini file path>
データソースの設定
ご利用の
odbc.iniファイルを編集します。vim $ODBCINI次のデータソース定義を追加します。プレースホルダーの値は、実際の接続情報を使用して置き換えてください。
説明/home/userを、targetフォルダの実際のパスに置き換えます。クラスターエンドポイントの確認方法については、「エンドポイントの表示または申請」をご参照ください。
[POLARDB] Description = ODBC for POLARDB Driver = /home/user/target/lib/unix/polardb-odbc.so Driver64 = /home/user/target/lib/unix/polardb-odbc.so Database = <Name of the database> Servername = <Endpoint of the database> Password = <Password> Port = <Port number> Username = <Username> Trace = yes TraceFile = /tmp/odbc.log FileUsage = 1
PolarDB への接続
Libtool 1.5 以降をインストールします。
yum install -y libtoolunixODBC-devel をインストールします。
yum install -y unixODBC-devel接続をテストします。
$isql -v POLARDB接続が成功した場合、次のように表示されます。
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
UNIX/Linux 向けサンプルコード
ドライバーパッケージ内の samples フォルダには、2 つのテストプログラムが含まれています。
Test1:CRUD 操作(挿入、更新、削除、検索)を実演します。
Test2:カーソルおよび出力パラメーターの使用方法を実演します。
サンプルデータベースのセットアップ
テストを実行する前に、PolarDB データベース内に emp テーブルを作成し、サンプルデータを挿入します。
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 );サンプルのビルドと実行
ドライバーパッケージを展開し、
samplesフォルダに移動します。tar -zxvf polardb-odbc.tar.gz cd polardb-odbc/samplesサンプルをコンパイルします。
makeこれにより、
Test1およびTest2の実行可能ファイルが生成されます。テストを実行します。
./Test1 ./Test2
以下に示すソースコードは一部のスニペットです。完全なソースコードは、Test1 および Test2 ファイル(samples フォルダ内)にあります。
Test1 — CRUD 操作
Test1 では、単一の接続を使用して、emp テーブルに対して挿入、更新、削除、検索操作を実行します。
int main(int argc, char* argv[])
{
/*初期化*/
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);
/*追加、削除、更新、照会操作*/
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");
/*切断*/
Disconnect(&hEnv,&hDBC,&hStmt);
/*クリーンアップ*/
free(hEnv);
free(hDBC);
free(hStmt);
return 0;
}Test2 — カーソルおよび出力パラメーター
Test2 では、REFCURSOR 出力パラメーターを返すストアドプロシージャの呼び出し方法を実演します。
int main(int argc, char* argv[])
{
/*定義*/
RETCODE rCode;
SQLUSMALLINT a;
SQLINTEGER Num1IndOrLen;
SQLSMALLINT iTotCols = 0;
int j;
SDWORD cbData;
/*初期化*/
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);
/*開始*/
ExecuteSimple_Select(&hStmt1,(UCHAR*) "BEGIN;");
/*準備*/
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;
/*実行*/
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") ;