Perl: DBI::ODBC操作Microsoft Access 2011-01-01 @ TECH
首先,Perl的DBI::ODBC模块检查,运行ppm list 检查DBI::ODBC模块是否正确安装。
我之前用的Perl5.8就没有ODBC模块 需要自行安装。
自行安装模块在Windows XP下会遇到很多问题。关于如何在windows xp下安装perl模块。下一篇文章会详细介绍。
这里我们回到重点,DBI:ODBC的使用
OS: Windows XP SP3
Perl: 5.12.2
DBI用法: http://search.cpan.org/~timb/DBI-1.616/DBI.pm
下面直接看实例,模仿ASP链接Access方法,这样对于我来说更容易看懂。
#声明调用DBI类,实际上我们是用的DBI::ODBC子类 use DBI; #数据源:数据库./proxy.mdb(当前目录下),表proxy,字段ip、portmy $connstr = "driver=Microsoft Access Driver (*.mdb);dbq=./Proxy.mdb"; #数据库链接对象 my $conn = DBI->connect("dbi:ODBC:$connstr",'','') or die "Can't connect to Database: $DBI::errstr"; #查询语句:读取前10条 my $query = "select top 10 ip,port from proxy"; #预处理 my $recordset = $conn->prepare($query) or die "Can't prepare statement: $DBI::errstr"; #返回结果 my $records = $recordset->execute or die "Can't execute statement: $DBI::errstr"; #定一个空数组,用来存储代理数据 my @pxy; #读取数据循环 while($col=$recordset->fetchrow_arrayref){ #将代理数据逐个push入@pxy数组,格式为ip:port push @pxy,"$col->[0]:$col->[1]";} #显示数组:用于检查 foreach $tmp(@pxy){print "$tmp\n";} #返回数据错误则终止程序 die $record->errstr if $record->err; #关闭数据库链接 $conn->disconnect;
遗留问题:返回数据能否一次性全部传递给数组并调用?
在DBI使用说明中看到了 $sth->fetchall_arrayref 的方法,但是注意返回值是一个句柄,也就是说是一个地址。
The fetchall_arrayref method can be used to fetch all the data to be returned from a prepared and executed statement handle. It returns a reference to an array that contains one reference per row.
#返回所有数据所在数组的地址 $all = $record->fetchall_arrayref(); #如何调用这个数组呢,今天学到了方法:@{$all} print @{$all}; #print后发现,数组的子元素全是数组地址,为什么? #因为每一行数据返回都是数组格式的,hash方式调用的话就是fetchall_hashref。 #因为我们预先知道是2列数据。所以就直接固化调用了 foreach $tmp(@{$all}){ #每一行: @{$tmp} #ip: @{$tmp}[0] #port: @{$tmp}[1] print "@{$tmp}[0]:@{$tmp}[1]\n"; }
由上可知,最初的想法:返回数据能否一次性全部传递给数组并调用。不可能实现。
哈哈哈。新年快乐!
上一篇: 2011
暂无评论