电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网络编程 -> Perl教程
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.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·perl常问问题集--第一篇_perl教程
·perl常规表达式(1)_perl教程
·perl语言全面编译(一)_perl教程
·perl语言全面编译(三)_perl教程
·perl语言全面编译(二)_perl教程
·各种平台下perl模块的安装方法_perl教程
·perl语言全面编译(四)_perl教程
·perldbi入门_perl教程
·有线电视宽带数据网络设计管理(上)_视频通信
·perl常问问题集--第一篇_perl教程

最新文章
·php5对mysql5的任意数据库表的管理代码示例(四)_php技巧
·用perl来分析并生成中文excel文件_perl教程
·photoshop基础教程:跟我学调色练习15-室内光效_photoshop教程
·使用perl连接mysql数据库_perl教程
·photoshop把照片打造为漫画艺术风格_photoshop教程
·photoshop绘制印度小美人_photoshop教程
·photoshop快速制作粗糙岩石纹理材质_photoshop教程
·用perl来分析并生成中文excel文件_perl教程
·photoshop特效设计-夜明珠_photoshop教程
·关于xsl中count()的使用_xsl教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号