Topik ini menjelaskan cara menggunakan driver Open Database Connectivity (ODBC) untuk menghubungkan aplikasi UNIX atau Windows ke kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle).
Prasyarat
Seorang pengguna telah dibuat di kluster PolarDB. Untuk informasi tentang cara membuat pengguna, lihat Buat akun database.
Alamat IP dari host yang digunakan untuk mengakses kluster PolarDB telah ditambahkan ke daftar putih kluster. Untuk informasi lebih lanjut tentang cara menambahkan alamat IP ke daftar putih kluster, lihat Konfigurasikan daftar putih untuk kluster.
Untuk Windows, pastikan sistem operasi adalah Windows 7 atau versi lebih baru dan Service Pack 1 telah diinstal.
Untuk sistem operasi UNIX atau Linux, pastikan alat-alat berikut telah diinstal:
Libtool 1.5.10 atau versi lebih baru.
unixODBC-devel.
PolarTools. Untuk informasi lebih lanjut tentang unduhan dan instalasi, lihat PolarDB-Tools.
Unduh driver
Untuk UNIX atau Linux 32-bit x86, unduh PolarDB-ODBC_Linux_X86_32.tar.gz.
Untuk UNIX atau Linux 64-bit x86, unduh PolarDB-ODBC_Linux_X86_64.tar.gz.
Untuk UNIX atau Linux 64-bit ARM, unduh PolarDB-ODBC_Linux_arm_64.tar.gz.
Untuk Windows 64-bit x86, unduh PolarDB-ODBC_Windows_x86_64.7z.
Untuk Windows 32-bit x86, unduh PolarDB-ODBC_Windows_x86_32.7z.
Instal driver ODBC di Windows
Unduh paket instalasi driver yang sesuai dengan arsitektur dan versi OS Anda. Untuk informasi lebih lanjut, lihat Unduh Driver.
Ekstrak paket instalasi.
Jalankan file
install.batsebagai administrator, lalu tekan tombol acak untuk keluar.
Opsional:Untuk menghapus instalasi driver ODBC, jalankan file
uninstall.bat.
Gunakan driver ODBC untuk terhubung ke PolarDB dari Server Windows
Di Control Panel, buka Administrative Tools.
Di halaman Administrative Tools, temukan dan jalankan ODBC Data Sources.
Dalam kotak dialog ODBC Data Source Administrator, klik Add.
Pilih POLARDB (UNICODE) sebagai driver untuk sumber data, lalu klik Finish.
Dalam kotak dialog yang muncul, konfigurasikan parameter berikut.
Parameter
Deskripsi
Sumber Data
Nama dari sumber data.
Deskripsi
Deskripsi dari sumber data.
Database
Nama dari kluster.
Mode SSL
Menentukan apakah akan mengaktifkan enkripsi berbasis SSL.
Server
Titik akhir dari database. Untuk informasi lebih lanjut tentang cara memeriksa titik akhir dari kluster PolarDB, lihat Lihat atau ajukan permohonan untuk titik akhir.
Prot
Port yang digunakan untuk terhubung ke database. Nilai default: 1521.
Nama Pengguna
Nama pengguna dari akun database.
Kata Sandi
Kata sandi dari akun database.
Klik Save.
Instal driver ODBC di Unix atau Linux
Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=<PolarDB-ODBC/lib/path>Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan ODBCINI:
export ODBCINI=<path file odbc.init Anda>Unduh driver ODBC berdasarkan arsitektur dan versi OS Anda. Untuk informasi lebih lanjut, lihat Unduh Driver.
Instal driver ODBC.
CatatanSetelah mengekstrak paket instalasi, Anda dapat langsung menggunakan driver ODBC. Jalankan perintah berikut untuk mengekstrak paket:
tar -zxvf polardb-odbc.tar.gzKode berikut menunjukkan struktur direktori:
├── include ├── lib └── samples 3 direktori
Gunakan driver ODBC untuk terhubung ke PolarDB dari server UNIX atau Linux
Instal Libtool pada Server Linux. Versi Libtool harus 1.5.1 atau yang lebih baru.
yum install -y libtoolInstal unixODBC-devel pada Server Linux.
yum install -y unixODBC-develUbah file
odbc.iniyang telah dikonfigurasi.vim $ODBCINITambahkan konten berikut ke file
odbc.ini:[POLARDB] Description = ODBC untuk POLARDB Driver = /home/user/target/lib/unix/polardb-odbc.so Driver64 = /home/user/target/lib/unix/polardb-odbc.so Database = <Nama database> Servername = <Titik akhir database> Password = <Kata sandi> Port = <Nomor port> Username = <Nama pengguna> Trace = yes TraceFile = /tmp/odbc.log FileUsage = 1CatatanUntuk informasi lebih lanjut tentang cara melihat titik akhir kluster PolarDB, lihat Lihat atau ajukan permohonan untuk titik akhir.
Ganti /home/user dalam contoh sebelumnya dengan jalur aktual folder
target.
Terhubung ke PolarDB.
$isql -v POLARDB +---------------------------------------+ | Terhubung! | | | | pernyataan-sql | | bantuan [namatabel] | | keluar | | | +---------------------------------------+ SQL>
Contoh untuk UNIX atau Linux
Contoh berikut menunjukkan cara menjalankan file Test1 dan Test2.
Buat skema tabel berikut di database PolarDB terlebih dahulu dan masukkan data berikut:
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 );Jalankan perintah berikut untuk mengekstrak paket driver ODBC:
tar -zxvf polardb-odbc.tar.gzJalankan perintah berikut untuk membuka folder
polardb-odbc:cd polardb-odbcBuka rentang
samplesdi folder driver ODBC.cd samplesKompilasi contoh uji. File uji berikut dihasilkan:
Test1danTest2.makeJalankan
Test1danTest2../Test1 ## Jalankan Test1. ./Test2 ## Jalankan Test2.CatatanTest1berisi contoh di mana operasi tambah, hapus, perbarui, dan kueri dilakukan.Test2berisi contoh di mana kursor dan parameter keluaran digunakan.Kode sampel berikut hanya sebagian dari kode sumber. Untuk melihat kode sumber lengkap, periksa file
Test1danTest2di foldersamplesdalam paket driver ODBC.
Kode sampel Test1:
...
int main(int argc, char* argv[])
{
/*Inisialisasi*/
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);
/*Operasi tambah, hapus, ubah, dan kueri*/
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");
/*Putuskan koneksi*/
Disconnect(&hEnv,&hDBC,&hStmt);
/*bersihkan*/
free(hEnv);
free(hDBC);
free(hStmt);
return 0;
}Kode sampel untuk Test2:
int main(int argc, char* argv[])
{
/*Definisi*/
RETCODE rCode;
SQLUSMALLINT a;
SQLINTEGER Num1IndOrLen;
SQLSMALLINT iTotCols = 0;
int j;
SDWORD cbData;
/*Inisialisasi*/
HENV *hEnv = (HENV*)malloc(sizeof(HENV));
HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
HSTMT *hStmt1 = (HSTMT*)malloc(sizeof(HSTMT));
/**Buat koneksi**/
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);
/*mulai*/
ExecuteSimple_Select(&hStmt1,(UCHAR*) "BEGIN;");
/*siapkan*/
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;
/*eksekusi*/
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 Kursor Pertama sebagai Parameter Keluaran \n") ;