GBase 8s数据库连接 – Perl(DBD::ODBC)
操作系统:RHEL7U6 64bit
软件需求:
1,GBase 8s CSDK
2,perl-5.16.3 及perl-devel-5.16.3
3,unixODBC-2.3.1
4,DBD-ODBC-1.60
1,系统环境确认
1.1 perl、perl-devel及unixODBC版本
Linux下root用户通过rpm确认perl、perl-devel,unixODBC、unixODBC-devel均已经安装,如下:
1 2 3 4 5 | [root@rhel7u6 ~] # rpm -qa perl perl-devel unixODBC unixODBC-devel perl-5.16.3-293.el7.x86_64 perl-devel-5.16.3-293.el7.x86_64 unixODBC-devel-2.3.1-11.el7.x86_64 unixODBC-2.3.1-11.el7.x86_64 |
1.2 GBase 8s CSDK已经安装
Linux下gbasedbt用户通过esql -V命令确认GBase 8s CSDK已经安装,如下:
1 2 3 | [gbasedbt@rhel7u6 ~]$ esql -V GBase CSDK Version 4.10, GBASE-ESQL Version 4.10.FC4G1_3.0.0 Software Serial Number AAA #B000000 |
2,ODBC配置
2.1 ODBC配置文件
修改/etc/odbc.ini配置文件,增加GBase 8s数据库连接信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ;--------------------------------------------------------------------------- ; GBase ODBC Sample File ; ; File: odbc.ini ; ;--------------------------------------------------------------------------- [ODBC Data Sources] testdb=GBase ODBC DRIVER ; ; Define ODBC Database Driver's Below - Driver Configuration Section ; [testdb] Driver=/opt/gbasedbt/lib/cli/iclis09b.so Description=GBase ODBC DRIVER Database=testdb LogonID=gbasedbt pwd=GBase123 Servername=gbase01 CursorBehavior=0 CLIENT_LOCALE=zh_CN.utf8 DB_LOCALE=zh_CN.utf8 TRANSLATIONDLL=/opt/gbasedbt/lib/esql/igo4a304.so ; ; UNICODE connection Section ; [ODBC] ;uncomment the below line for UNICODE connection ;UNICODE=UCS-4 ; ; Trace file Section ; Trace=0 TraceFile=/tmp/odbctrace.out InstallDir=/opt/gbasedbt TRACEDLL=idmrs09a.so |
2.2 验证ODBC配置
加载GBase 8s CSDK环境变量,包含连接到GBase 8s数据库所需的GBASEDBTDIR、LD_LIBRARY_PATH,以及选用的字符集DB_LOCALE、CLIENT_LOCALE、LANG等。加载ODBCINI环境变量。环境变量内容可保存为配置文件,如:gbase8s_odbc_env,以供调用。
1 2 3 4 5 6 7 8 9 10 | export GBASEDBTDIR= /opt/gbasedbt # GBase 8s CSDK安装目录 export GBASEDBTSERVER=gbase01 # 远程GBase 8s数据库实例名称 export PATH=$GBASEDBTDIR /bin :$PATH:$HOME /bin export DB_LOCALE=zh_CN.utf8 export CLIENT_LOCALE=zh_CN.utf8 export LD_LIBRARY_PATH=$GBASEDBTDIR /lib :$GBASEDBTDIR /lib/esql :$LD_LIBRARY_PATH export ODBCINI= /etc/odbc .ini |
通过isql命令检查ODBC配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@localhost ~] # . gbase8s_odbc_env [root@localhost ~] # isql -v testdb +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select dbservername::varchar(40) from systables where tabid = 1; +-----------------------------------------+ | | +-----------------------------------------+ | gbase01 | +-----------------------------------------+ SQLRowCount returns -1 1 rows fetched |
3,编译安装DBD-ODBC
将DBD-ODBC-1.60.tar.gz上传至GBase 8s CSDK所在的服务器上,使用root用户解压。
1 | [root@rhel7u6 perl] # tar -zxvf DBD-ODBC-1.60.tar.gz |
在生成的DBD-ODBC-1.60目录里执行perl Makefile.PL
注意:需要设置LANG=C,若设置为zh_CN.UTF-8会有个警告
1 2 | [root@rhel7u6 DBD-ODBC-1.60] # export LANG=C [root@rhel7u6 DBD-ODBC-1.60] # perl Makefile.PL |
make 操作的过程中有警告,暂时忽视之
1 2 | [root@rhel7u6 DBD-ODBC-1.60] # make [root@rhel7u6 DBD-ODBC-1.60] # make install |
4,确认DBD::ODBC已经安装
通过命令查询DBD::ODBC组件已经安装,显示其版本号
1 2 | [root@rhel7u6 ~] # perl -MDBD::ODBC -le 'print DBD::ODBC->VERSION' 1.60 |
5,Perl通过DBD::ODBC连接GBase 8s数据库测试
编写测试脚本程序perl_dbi_odbc.perl,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #!/usr/bin/perl use warnings; use strict; use DBI; # 通过ODBC连接到数据库 testdb my $dbh = DBI->connect ( "DBI:ODBC:testdb", 'gbasedbt', 'GBase123' ); # 开始事务 $dbh->do("begin"); # 删除表及创建表 my $sth_d_tab = $dbh->prepare("drop table if exists perl_dbi_gbasedbt"); $sth_d_tab->execute(); my $sth_c_tab = $dbh->prepare("create table perl_dbi_gbasedbt (id int, name varchar(40))"); $sth_c_tab->execute(); # 插入数据 my $sth_i_tab = $dbh->prepare("insert into perl_dbi_gbasedbt values(1,'测试中文输入ODBC')"); $sth_i_tab->execute(); # 查询数据 my $sth_s_tab = $dbh->prepare("select first 10 id,name from perl_dbi_gbasedbt"); $sth_s_tab->execute(); while (my $row = $sth_s_tab->fetchrow_hashref()) { print sprintf("%d %-40s\n", $row->{id}, $row->{name}); } # 提交事务,关闭数据库连接 $dbh->do("commit"); $dbh->disconnect(); exit 0; |
perl perl_dbi_odbc.pl执行并输出结果:
1 2 | [root@rhel7u6 DBD-ODBC-1.60] # perl perl_dbi_odbc.pl 1 测试中文输入ODBC |
perl通过DBD::ODBC连接到GBase 8s数据库,测试成功。