DBD-ShenTong接口简介

Perl语言被称为“实用报表提取语言”(Practical Extraction and Report Language),其最初的设计者是Larry Wall,Perl指的是语言本身,perl指的是程序运行的解释器。Perl语言汲取了很多编程语言的特性,所以如果你有其他语言的编程基础,上手会非常快。它显著的特点是集成的正则表达式和第三方库(CPAN),常用于linux系统处理生物数据,善于处理字符串和批量化。Perl语言相比于C、C#、C++、Java等很简单,对于code的新手来说,上手很容易。

PERL对数据库的支持广而且全,几乎所有的主流数据库都有与之相应的PERL模块支持。为了开发可在不同数据库上移植的PERL应用,DBI(DataBase Interface)模块应运而生,使用这个模块,应用只需使用统一的接口便能操作不同的数据库,真正实现了可移植;当然,这个DBI也配备有相应的开关来支持不同数据库的各种特性。

DBI只是个抽象层,要实现支持不同的数据库,则需要在DBI之下,编写针对不同数据库的驱动。对MySql来说,有DBD::Mysql, 而对ORACLE来说,则是DBD::Oracle,而神通数据库这是DBD:ShenTong其中的DBD这是DataBase Driver的简写。

神通数据库DBD-ShenTong是从访问Oracle的DBD-Oracle移植而来,两者保持使用的高度兼容。DBD-ShenTong依赖ACI接口与数据库进行交互。

../../../../_images/lay2.png

DBD-ShenTong安装

DBI安装

1)DBI源码下载:https://github.com/perl5-dbi/dbi

2)编译安装:

cd dbi

perl Makefile.PL

make

make install

DBD-ShenTong安装

1)DBD-ShenTong源码:$SZ_OSCAR_HOME/drivers/DBD-ShenTong目录下

2)编译安装:

cd DBD-ShenTong

perl Makefile.PL

make

make install

3)安装后,在/usr/local/lib64/perl5/auto/DBD/目录下会有ShenTong目录,比如:

../../../../_images/install2.png

还可以将以下脚本存储为一个check.pl文件中:

#!/usr/bin/perl
use strict;
use ExtUtils::Installed;
my $inst=ExtUtils::Installed->new();
my @modules = $inst->modules();
foreach(@modules){
        my $ver = $inst->version($_) || "???";
        printf("%-12s -- %s\n",$_,$ver);
}
exit;

执行:perl check.pl,如果DBD-Shentong正常安装,会打印如下信息:

../../../../_images/runcheck1.png

注解

部分老的perl版本不支持上面的检测脚本,可以升级perl解决。

注解

DBD-ShenTong编译依赖当前已经安装的数据库环境,依赖SZ_OSCAR_HOME环境变量,会从$SZ_OSCAR_HOME/aci/include下寻找aci的头文件;从$SZ_OSCAR_HOME/bin下依赖aci库。

使用DBD-ShenTong的样例

1)数据库中建表:

Drop table test;
Create table test( a int);
Insert into test values(1);
Insert into test values(2);

2)将以下内容存储为dbtest.pl文件:

#!/usr/bin/perl -w
use strict;
use DBI;
my $host = "localhost";         # 主机地址
my $driver = "ShenTong";           # 接口类型 默认为 localhost
my $database = "osrdb";        # 数据库
# 驱动程序对象的句柄
my $dsn = "DBI:$driver:$host:2003/$database";
my $userid = "sysdba";            # 数据库用户名
my $password = "szoscar55";        # 数据库密码

# 连接数据库
my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;
my $sth = $dbh->prepare("SELECT * FROM test");   # 预处理 SQL  语句
$sth->execute();    # 执行 SQL 操作

# 循环输出所有数据
while ( my @row = $sth->fetchrow_array() )
{
       print join('\t', @row)."\n";
}

$sth->finish();
$dbh->disconnect();

3)执行dbtest.pl:

perl dbtest.pl

执行结果:

[root@qt596 perl]# perl dbtest.pl

1

2