无论是写脚本还是做CGI,如何使用Perl来访问数据库就是很有用的一个知识。
各种语言和开发环境访问数据库有各种不同的方式,比如可以用C和数据库提供的API接口来进行访问,也可以用JDBC、ODBC、ADO等封装好的统一接口来进行访问。Perl访问数据库最常用的包是DBI,可以在www.cpan.org找到。另外还需要安装对应数据库的驱动包,例如DBD::MySQL、DBD::Oracle、DBD::Sybase或者DBD::ODBC等。具体的安装方法请参考上期文章,在此就不赘述了。
下文以常见的MySQL为例,说说如何实现对数据库的操作。
1 基本流程
习惯在Windows下开发数据库、熟悉ADO、ADO.NET的朋友,一定对ADOConnection/ADODataSet/ADOTable等类耳熟能详。DBI的接口与之类似,但在操作方法上又有不同,对ADO熟悉的朋友不妨比较一下异同。一般来说,数据库操作由以下几个步骤组成一个常见的流程:
1. 建立一个数据库连接
2. 通过建立的数据库连接,执行SQL语句
3. 执行SQL后获取返回的数据集
4. 在数据集中对记录进行处理,一般是一个循环的过程
5. 处理完毕,关闭数据库连接,释放资源
下面是按照上述的流程,在Perl中访问MySQL的一段代码,以这段代码为例,详细说明DBI的使用方法。
#!/usr/bin/perl -w use strict; use DBI; my $dbh = DBI->connect("DBI:mysql:test:192.168.1.2", 'root', 'password'); my $sth = $dbh->prepare("SELECT * FROM test1"); $sth->execute(); while ( my @row = $sth->fetchrow_array() ) { print join('\t', @row)."\n"; } $sth->finish(); $dbh->disconnect();
注意代码中的灰色部分就是要特别关注的数据库访问接口,这里展现的只是一部分,下面将会依次说明每一个步骤,以及其它的操作在Perl中是如何实现的。
可移植的DBI方法:
connect 建立到一个数据库服务器的连接
disconnect 断开数据库服务器的连接
prepare 准备执行一个SQL语句
execute 执行准备好的语句
do 准备并执行一个SQL语句
quote 加引号于要插入的字符串或BLOB值
fetchrow_array 作为一个字段数组取出下一行
fetchrow_arrayref 作为一个字段的引用数组取出下一行
fetchrow_hashref 作为一个哈希表的引用取出下一行
fetchall_arrayref 作为一个字段数组取出所有数据
finish 完成一条语句并且让系统释放资源
rows 返回受影响的行数
data_sources 返回可在localhost上得到的数据库的数组
ChopBlanks 控制fetchrow_*方法是否剥去空格
NUM_OF_PARAMS 在准备的语句中的占位(placeholder-参数)的数目
NULLABLE 其列可以是NULL
trace 执行调试跟踪