麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Perl > 正文

PerlDBI入門

2019-11-18 17:23:44
字體:
供稿:網(wǎng)友
目錄
基本功能
建立連線
選項(xiàng)
下達(dá)SQL
進(jìn)階功能
SELECT述
高等技巧
交易機(jī)制
注意事項(xiàng)
其他資訊


本文是以PerlDBIExamples為藍(lán)本,配合DBMaker好學(xué)易用的特性,以及幾個(gè)淺顯易懂的例子,希望能夠一步步地帶領(lǐng)使用者學(xué)習(xí)PerlDBImodules存取DBMaker資料庫的方法。而原作者撰寫主要原動力是希望藉由這篇文章的問世,以降低DBImailinglist中一再重出現(xiàn)的FAQ。

讀完本文之後,我們就能學(xué)到利用DBI建立一個(gè)完備的資料庫程式。以下就先由DBI的基本功能開始,然後再逐步研究改善效能與可靠度技巧。

基本功能
DBI-DatabaseindependentinterfaceforPerl.PerlDBI是Perl程式語言存取資料庫時(shí)的標(biāo)準(zhǔn)應(yīng)用程式介面(API)。DBI中定義了一組函數(shù)、變數(shù)和一致性的資料庫介面,可滿足與特定資料庫無關(guān)的特性。

值得一提的,DBI只是一個(gè)程式介面,利用一組十分輕巧的層面,將你的應(yīng)用程式與一個(gè)以上的資料庫驅(qū)動程式緊密地結(jié)合在一起,DBI的架構(gòu)主要只是提供標(biāo)準(zhǔn)的介面,目的是為了方便使用者下達(dá)一些簡單的指令,就可以輕易地讓那些驅(qū)動程式發(fā)揮作用

首先該做的事就是建構(gòu)以及安裝DBI,詳細(xì)的步驟可參考DBIINSTALL文件中有說明.然後再來就是建構(gòu)出所需的資料庫驅(qū)動程式,或是參考DBD.在每個(gè)DBD套件中都應(yīng)該會有建構(gòu)程序。與其他Perl模組相較之下,安裝DBI/DBD步驟算是相當(dāng)容易

localhost:~/DBI-1.08$perlMakefile.PL&&make
&&maketest&&makeinstall
在DBI與DBD安裝完成之後,您可以執(zhí)行下列指令閱讀更多的資訊:

localhost:~$perldocDBI
建立連線
每一種資料庫都有不同的連線方式,若是想知道特殊用法,請務(wù)必閱讀DBD所提供的說明文件。下面的例子是連線到DBMaker的基本方法.

usestrict;
useDBI;

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

上述的connect函數(shù)用到了三個(gè)參數(shù):資料來源名稱(datasourcename,DSN),使用者名稱和密碼。其中DSN的格式為dbi:DriverName:instance.不過我們要如何知道連線成不成功呢?首先可以查看connect的傳回值,true代表成功,false就是代表失敗。其次,當(dāng)有錯(cuò)誤發(fā)生時(shí),DBI會把錯(cuò)誤訊息存放在packagevariable$DBI::errstr之中。

usestrict;
useDBI;

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

結(jié)束資料庫連線請使用disconnect()函數(shù),正確地使用可避免錯(cuò)誤訊息"Databasehandledestroyedwithoutexplicitdisconnect"的發(fā)生.

選項(xiàng)
在連線資料庫時(shí)connect()這個(gè)方法可以接受hash型態(tài)的選項(xiàng),常用的選項(xiàng)包括了:AutoCommit,設(shè)為true表示資料庫交易自動確認(rèn);RaiseError,告訴DBI在錯(cuò)誤發(fā)生時(shí)觸發(fā)例外croak$DBI::errstr而不只是僅傳回錯(cuò)誤代碼;
my$sql=
QQ{CREATETABLEemployees(idINTEGERNOTNULL,
nameVARCHAR(128),
titleVARCHAR(128),
phoneCHAR(10)
)};
$dbh->do($sql);
$dbh->commit();
$dbh->disconnect();

進(jìn)階功能
我們已經(jīng)學(xué)會了連線資料庫,錯(cuò)誤偵測,以及下達(dá)簡單的SQL述的方法.是該學(xué)一些更有用的程式語法的時(shí)候了.

SELECT述
在SQL的述中,最常使用的指令莫過於SELECT述.為了使用SELECT,我們應(yīng)該先prepare這一段述,然後進(jìn)行execute動作.在下面的程式片段中,我們都會使用statementhandle$sth有存取SELECT的結(jié)果.

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資料庫為查詢指令先準(zhǔn)備好執(zhí)行計(jì)畫,之後再執(zhí)行該查詢指令.到目前為止還沒有任何一筆記錄傳回.稍後我們會使用bind_columns的技術(shù)以取得資料庫輸出的記錄.bind_columns分別將每個(gè)輸出欄位結(jié)到一個(gè)scalarreference.一旦呼叫到fetch時(shí),這些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();

這倒是一個(gè)列印出全公司電話連絡(luò)簿的好方法,尤其是WHERE區(qū)塊的使用讓我們輕易地取出所有的資料輸出!下面會利用到bind_param先將SQL述做一次prepare,就能夠高速地執(zhí)行許多次.

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();

高等技巧
交易機(jī)制
到目前為止,我們的動作都還不需要使用到交易機(jī)制的功能,不過當(dāng)下達(dá)UPDATE或是DELETE述時(shí),我們就會希望使用到它了.根據(jù)DBI文件指出,如果想作一套穩(wěn)固的交易機(jī)制,就應(yīng)該配合eval{...}區(qū)塊來攔截錯(cuò)誤的發(fā)生,最後再使用commit或rollback來完成整個(gè)交易程序.這就是我們以下所要談的內(nèi)容.

本程式示保四筆記錄寫入資料庫的方法.

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();

注意事項(xiàng)
關(guān)於finish的呼叫在我們的例子并不是必要的.這個(gè)函數(shù)適用於statementhandle完成時(shí)所使用。
永遠(yuǎn)要加上usestrict。
仔細(xì)閱讀PerlDBImanual以深入解DBI架構(gòu)
其他資訊
DBI-ADatabaseInterfaceModuleforPerl5
DBIatHermetica
DBImailinglistinformation
DBImailinglistarchives
Persistentconnectionswithmod_perl

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

ThisdocumentrewritetoChinesebyJackieYu.Lastmodified20May1999
ThisdocumentCopyrightJeffreyWilliamBaker.Lastmodified10October1998



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 国产成人综合在线观看 | 国毛片| 污视频在线看 | 久久中文一区 | 久久9色 | 久久久久久久久成人 | 一区二区三区日韩 | www.69色| 久久久久久久久久综合 | 精品在线观看一区 | 极色品影院 | 欧美一级一区二区三区 | 久久久日韩精品一区二区三区 | 国产羞羞视频在线观看 | 钻石午夜影院 | 337p粉嫩大胆噜噜噜亚瑟影院 | 成人福利电影在线观看 | 成人三级黄色片 | 国产免费一区二区三区在线能观看 | 精品偷拍久久 | 91精品国产综合久久久动漫日韩 | 网站激情 | 欧美极品免费 | 污片视频在线观看 | 黄色成人小视频 | 亚洲精品久久久久www | 日韩精品中文字幕一区二区三区 | 国产在线观看 | 日韩黄色av网站 | 特级无码毛片免费视频尤物 | 国内精品久久久久久2021浪潮 | 国产日韩大片 | 欧美日韩在线中文字幕 | jj视频在线播放 | 精品国产一区二区三 | 国产外围在线 | 欧美成人a| 久久久一区二区 | 国产91亚洲精品久久久 | 日韩av电影免费在线观看 | 久草在线手机观看 |