PerlDBI入门
目录
基本功能 建立连线 选项 下达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,就能够高速地执行许多次. 上一篇:Perl语言全面编译(四) 下一篇:Perl如何调试程序 更多相关文章
|
推荐文章
精彩文章
|