當前位置:
首頁 > 知識 > Perl 資料庫連接

Perl 資料庫連接

Perl 5 中我們可以使用 DBI 模塊來連接資料庫。

DBI 英文全稱:Database Independent Interface,中文稱為資料庫獨立介面。

DBI 作為 Perl 語言中和資料庫進行通訊的標準介面,它定義了一系列的方法,變數和常量,提供一個和具體資料庫平台無關的資料庫持久層。



DBI 結構

DBI 和具體資料庫平台無關,我們可以將其應用在Oracle, MySQL 或 Informix, 等資料庫中。

Perl 資料庫連接

圖表中 DBI 獲取所有 API(Application Programming Interface:應用程序介面) 發送過來的 SQL 數據,然後分發到對應的驅動上執行,最後再獲取數據返回。

變數名約定

以下設置了比較常用的變數名命名方法:

$dsn 驅動程序對象的句柄$dbh 一個資料庫對象的句柄$sth 一個語句或者一個查詢對象的句柄$h 通用的句柄 ($dbh, $sth, 或 $drh),依賴於上下文$rc 操作代碼返回的布希值(true 或 false)$rv 操作代碼返回的整數值@ary 查詢返回的一行值的數組(列表)$rows 操作代碼返回的行數值$fh 文件句柄undef NULL 值表示未定義\%attr 引用屬性的哈希值並傳到方法上


資料庫連接

接下來我們以 MySQL 資料庫為例演示 Perl 是如何對資料庫進行操作的。

這裡我們在 MySQL 資料庫創建 RUNOOB 資料庫,數據表為 Websites,表結構及數據如下圖所示:

Perl 資料庫連接

下載該數據表:http://static.runoob.com/download/websites_perl.sql

接下來我們使用以下代碼來連接資料庫:

實例

#!/usr/bin/perl -wuse strict;use DBI;
my$host = "localhost"; # 主機地址my$driver = "mysql"; # 介面類型 默認為 localhostmy$database = "RUNOOB"; # 資料庫# 驅動程序對象的句柄my$dsn = "DBI:$driver:database=$database:$host";
my$userid = "root"; # 資料庫用戶名my$password = "123456"; # 資料庫密碼# 連接資料庫my$dbh = DBI->connect($dsn, $userid, $password)ordie$DBI::errstr;my$sth = $dbh->prepare("SELECT * FROM Websites"); # 預處理 SQL 語句$sth->execute(); # 執行 SQL 操作# 注釋這部分使用的是綁定值操作# $alexa = 20;# my $sth = $dbh->prepare("SELECT name, url# FROM Websites# WHERE alexa > ?");# $sth->execute( $alexa ) or die $DBI::errstr;# 循環輸出所有數據while(my@row = $sth->fetchrow_array()){printjoin(" ", @row)."
";}$sth->finish();$dbh->disconnect();



插入操作

執行步驟:

  • 使用 prepare() API 預處理 SQL 語句。

  • 使用 execute() API 執行 SQL 語句。

  • 使用 finish() API 釋放語句句柄。

  • 最後如果一切順利就會提交以上執行操作。

my $sth = $dbh->prepare("INSERT INTO Websites
(name, url, alexa, conutry )
values
("Twitter", "https://twitter.com/", 10, "USA")");$sth->execute() or die $DBI::errstr;$sth->finish();$dbh->commit or die $DBI::errstr;

應用程序還可以綁定輸出和輸入參數,下面例子通過用變數 取代 ? 佔位符的位置來執行一條插入查詢:

my $name = "Twitter";my $url = "https://twitter.com/";my $alexa = 10;my $conutry = "USA";my $sth = $dbh->prepare("INSERT INTO Websites
(name, url, alexa, conutry )
values
(?,?,?,?)");$sth->execute($name,$url,$alexa, $conutry)
or die $DBI::errstr;$sth->finish();$dbh->commit or die $DBI::errstr;


更新操作

執行步驟:

  • 使用 prepare() API 預處理 SQL 語句。

  • 使用 execute() API 執行 SQL 語句。

  • 使用 finish() API 釋放語句句柄。

  • 最後如果一切順利就會提交以上執行操作。

my $sth = $dbh->prepare("UPDATE Websites
SET alexa = alexa + 1
WHERE country = "CN"");$sth->execute() or die $DBI::errstr;print "更新的記錄數 :" + $sth->rows;$sth->finish();$dbh->commit or die $DBI::errstr;

應用程序還可以綁定輸出和輸入參數,下面例子通過用變數取代 ? 佔位符的位置來執行一條更新查詢:

$name = "我愛學習";my $sth = $dbh->prepare("UPDATE Websites
SET alexa = alexa + 1
WHERE name = ?");$sth->execute("$name") or die $DBI::errstr;print "更新的記錄數 :" + $sth->rows;$sth->finish();

當然我們也可以綁定要設置的值,如下所示將 country 為 CN 的 alexa 都修改為 1000:

$country = "CN";$alexa = 1000:;my $sth = $dbh->prepare("UPDATE Websites
SET alexa = ?
WHERE country = ?");$sth->execute( $alexa, "$country") or die $DBI::errstr;print "更新的記錄數 :" + $sth->rows;$sth->finish();


刪除數據

執行步驟:

  • 使用 prepare() API 預處理 SQL 語句。

  • 使用 execute() API 執行 SQL 語句。

  • 使用 finish() API 釋放語句句柄。

  • 最後如果一切順利就會提交以上執行操作。

以下數據將 Websites 中 alexa 大於 1000 的數據都刪除:

$alexa = 1000;my $sth = $dbh->prepare("DELETE FROM Websites
WHERE alexa = ?");$sth->execute( $alexa ) or die $DBI::errstr;print "刪除的記錄數 :" + $sth->rows;$sth->finish();$dbh->commit or die $DBI::errstr;


使用 do 語句

do 語句可以執行 UPDATE, INSERT, 或 DELETE 操作,使用他比較簡短,執行成功返回true,執行失敗返回 false,實例如下:

$dbh->do("DELETE FROM Websites WHERE alexa>1000");


COMMIT 操作

commit 為提交事務,完成資料庫的操作:

$dbh->commit or die $dbh->errstr;


ROLLBACK 操作

如果在 SQL 執行過程中發生錯誤,可以回滾數據,不做任何改變:

$dbh->rollback or die $dbh->errstr;


事務

和其它的語言一樣, perl DBI對資料庫的操作也支持事務處理, 它的實現方式有兩個:

1、 在連接資料庫的時候就開始一個事務

$dbh = DBI->connect($dsn, $userid, $password, {AutoCommit => 0}) or die $DBI::errstr;

以上代碼在連接的時候設置了AutoCommit為false, 也就是說當你對資料庫進行更新操作的時候, 它不會自動地把那些更新直接寫到資料庫里, 而是要程序通過 $dbh->commit 來使數據真正地寫到資料庫里, 或 $dbh->rollback 來回滾剛才的操作。

2、 通過$dbh->begin_work()語句來開始一個事務

這種方式就不需要在連接資料庫的時候設置 AutoCommit = 0 。

可以一次資料庫連接進行多次事務操作, 不用每一次事務的開始都去連接一次資料庫。

$rc = $dbh->begin_work or die $dbh->errstr;#######################這裡執行一些 SQL 操作#####################$dbh->commit; # 成功後操作-----------------------------$dbh->rollback; # 失敗後回滾


斷開資料庫連接

如果我們需要斷開資料庫連接,可以使用 disconnect API:

$rc = $dbh->disconnect or warn $dbh->errstr;

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

jQuery UI 實例-縮放(Resizable)
jQuery UI 小部件(Widget)方法調用

TAG:程序員小新人學習 |