首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 软件教学-> 办公软件
perldbi入门_perl教程
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
目录
基本功能
建立连线
选项
下达SQL
进阶功能
SELECT述
高等技巧
交易机制
注意事项
其他资讯


本文是以PerlDBIExamples为蓝本,配合DBMaker好学易用的特性,以及几个浅显易懂的例子,希望能够一步步地带领使用者学习PerlDBImodules存取DBMaker资料库的方法。而原作者撰写主要原动力是希望藉由这篇文章的问世,以降低DBImailinglist中一再重出现的FAQ。

读完本文之後,我们就能学到利用DBI建立一个完备的资料库程式。以下就先由DBI的基本功能开始,然後再逐步研究改善效能与可靠度技巧。

基本功能
DBI-DatabaseindependentinterfaceforPerl.PerlDBI是Perl程式语言存取资料库时的标准应用程式介面(API)。DBI中定义了一组函数、变数和一致性的资料库介面,可满足与特定资料库无关的特性。

值得一提的,DBI只是一个程式介面,利用一组十分轻巧的层面,将你的应用程式与一个以上的资料库驱动程式紧密地结合在一起,DBI的架构主要只是提供标准的介面,目的是为了方便使用者下达一些简单的指令,就可以轻易地让那些驱动程式发挥作用

首先该做的事就是建构以及安装DBI,详细的步骤可参考DBIINSTALL文件中有说明.然後再来就是建构出所需的资料库驱动程式,或是参考DBD.在每个DBD套件中都应该会有建构程序。与其他Perl模组相较之下,安装DBI/DBD步骤算是相当容易

localhost:~/DBI-1.08$perlMakefile.PL&&make
&&maketest&&makeinstall
在DBI与DBD安装完成之後,您可以执行下列指令阅读更多的资讯:

localhost:~$perldocDBI
建立连线
每一种资料库都有不同的连线方式,若是想知道特殊用法,请务必阅读DBD所提供的说明文件。下面的例子是连线到DBMaker的基本方法.

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
);

上述的connect函数用到了三个参数:资料来源名称(datasourcename,DSN),使用者名称和密码。其中DSN的格式为dbi:DriverName:instance.不过我们要如何知道连线成不成功呢?首先可以查看connect的传回值,true代表成功,false就是代表失败。其次,当有错误发生时,DBI会把错误讯息存放在packagevariable$DBI::errstr之中。

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
)
||die"Databaseconnectionnotmade:$DBI::errstr";
$dbh->disconnect();

结束资料库连线请使用disconnect()函数,正确地使用可避免错误讯息"Databasehandledestroyedwithoutexplicitdisconnect"的发生.

选项
在连线资料库时connect()这个方法可以接受hash型态的选项,常用的选项包括了:AutoCommit,设为true表示资料库交易自动确认;RaiseError,告诉DBI在错误发生时触发例外croak$DBI::errstr而不只是仅传回错误代码;PrintError,让DBI以警告方式warn$DBI::errstr传回错误讯息.

在下一段程式中,是希望进行采交易处理的用法,设定成AutoCommitoff,RaiseErroron,而让PrintError使用内定值on.

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
{
RaiseError=>1,
AutoCommit=>0
}
)
||die"Databaseconnectionnotmade:$DBI::errstr";
$dbh->disconnect();

有一点要特别注意,如果资料库本身不支援交易处理的功能时,设定AutoCommitoff会接收到错误发生的传回值.

下达SQL
现在开始可以对我们的资料库做一些有意义的事了.下达至资料库的SQL述分成两类.一是查询指令,预期会有数笔资料传回,例如SELECT,这一类的指令我们会使用prepare方法.另一类的指令,如CREATE和DELETE,我们会使用do方法.我们先看看後者如何使用.

这一段程式示在资料库中建立一个员工资料表格的方法.

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
{
RaiseError=>1,
AutoCommit=>0
}
)
||die"Databaseconnectionnotmade:$DBI::errstr";

my$sql=qq{CREATETABLEemployees(idINTEGERNOTNULL,
nameVARCHAR(128),
titleVARCHAR(128),
phoneCHAR(10)
)};
$dbh->do($sql);
$dbh->commit();
$dbh->disconnect();

进阶功能
我们已经学会了连线资料库,错误侦测,以及下达简单的SQL述的方法.是该学一些更有用的程式语法的时候了.

SELECT述
在SQL的述中,最常使用的指令莫过於SELECT述.为了使用SELECT,我们应该先prepare这一段述,然後进行execute动作.在下面的程式片段中,我们都会使用statementhandle$sth有存取SELECT的结果.

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jeerrypassword,
{
RaiseError=>1,
AutoCommit=>0
}
)
||die"Databaseconnectionnotmade:$DBI::errstr";

my$sql=qq{SELECT*FROMemployees};
my$sth=$dbh->prepare($sql);
$sth->execute();

$dbh->disconnect();

上述程式要求DBMaker资料库为查询指令先准备好执行计画,之後再执行该查询指令.到目前为止还没有任何一笔记录传回.稍後我们会使用bind_columns的技术以取得资料库输出的记录.bind_columns分别将每个输出栏位结到一个scalarreference.一旦呼叫到fetch时,这些scalars就会填入这资料库传回的值.

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
{
RaiseError=>1,
AutoCommit=>0
}
)
||die"Databaseconnectionnotmade:$DBI::errstr";

my$sql=qq{SELECTid,name,title,phoneFROMemployees};
my$sth=$dbh->prepare($sql);
$sth->execute();

my($id,$name,$title,$phone);
$sth->bind_columns(undef,\$id,\$name,\$title,\$phone);

while($sth->fetch()){
print"$name,$title,$phone\n";
}

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

这倒是一个列印出全公司电话连络簿的好方法,尤其是WHERE区块的使用让我们轻易地取出所有的资料输出!下面会利用到bind_param先将SQL述做一次prepare,就能够高速地执行许多次.

usestrict;
useDBI;

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
{
RaiseError=>1,
AutoCommit=>0
}
)
||die"Databaseconnectionnotmade:$DBI::errstr";

my@names=("Larry","Tim","Randal","Doug");

my$sql=qq{SELECTid,name,title,phoneFROMemployeesWHEREnameLIKE?};
my$sth=$dbh->prepare($sql);

for(@names){
$sth->bind_param(1,$_);
$sth->execute();

my($id,$name,$title,$phone);
$sth->bind_columns(undef,\$id,\$name,\$title,\$phone);

while($sth->fetch()){
print"$name,$title,$phone\n";
}
}

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

高等技巧
交易机制
到目前为止,我们的动作都还不需要使用到交易机制的功能,不过当下达UPDATE或是DELETE述时,我们就会希望使用到它了.根据DBI文件指出,如果想作一套稳固的交易机制,就应该配合eval{...}区块来拦截错误的发生,最後再使用commit或rollback来完成整个交易程序.这就是我们以下所要谈的内容.

本程式示保四笔记录写入资料库的方法.

usestrict;
useDBIqw(:sql_types);

my$dbh=DBI->connect(dbi:DBMaker:dbsample,
jerry,
jerrypassword,
{
RaiseError=>1,
AutoCommit=>0
}
)
||die"Databaseconnectionnotmade:$DBI::errstr";

my@records=(
[0,"LarryWall","PerlAuthor","555-0101"],
[1,"TimBunce","DBIAuthor","555-0202"],
[2,"RandalSchwartz","GuyatLarge","555-0303"],
[3,"DougMacEachern","ApacheMan","555-0404"]
);

my$sql=qq{INSERTINTOemployeesVALUES(?,?,?,?)};
my$sth=$dbh->prepare($sql);


for(@records){
eval{
$sth->bind_param(1,@$_->[0]);
$sth->bind_param(2,@$_->[1]);
$sth->bind_param(3,@$_->[2]);
$sth->bind_param(4,@$_->[3]);
$sth->execute();
$dbh->commit();
};

if($@){
warn"Databaseerror:$DBI::errstr\n";
$dbh->rollback();#justdieifrollbackisfailing
}
}

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

注意事项
关於finish的呼叫在我们的例子并不是必要的.这个函数适用於statementhandle完成时所使用。
永远要加上usestrict。
仔细阅读PerlDBImanual以深入解DBI架构
其他资讯
DBI-ADatabaseInterfaceModuleforPerl5
DBIatHermetica
DBImailinglistinformation
DBImailinglistarchives
Persistentconnectionswithmod_perl

--------------------------------------------------------------------------------

ThisdocumentrewritetoChinesebyJackieYu.Lastmodified20May1999
ThisdocumentCopyrightJeffreyWilliamBaker.Lastmodified10October1998



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发
·在.net中轻松掌握Windows窗体间的数据交互-.NET教程,.NET Framework
·Java中的类反射机制-JSP教程,Java技巧及代码
·小技巧让pdf文件与word文档之间自由地转换
·j2ee程序员应该掌握的linux知识-JSP教程,J2EE/EJB/服务器
·通过WMI获得硬盘和CPU的物理序列号(VB.net)-.NET教程,VB.Net语言
·firfox浏览器开发人公开firfox2.0开发计划
·VB.net入门(10):补充:类~属性-.NET教程,VB.Net语言
·office2003实战秘笈之excel轻松制胜招
·C#编码规范.doc-.NET教程,C#语言
最新文章
·天涯试水网络口碑营销 邢明:希望与"关键词"媲美_站长访谈
·美梨网站长冰寒的商务之道_站长访谈
·白手起家 新网站流量快速提高之道_站长心得
·照片处理 photoshop简单制作照片柔光效果_photoshop教程
·网络百戒 ---网页外观_站长心得
·utf-8转换gb2312编码,解决统计google搜索来源关键字乱_google推广
·googleadsense作弊不是技术的较量_google推广
·google改进搜索服务 企业可在local更新资料_google推广
·rss订阅对你的网站搜索表现有好处吗?_站长心得
·15种简洁有效的网站推广方法_站长心得
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭