一 Perl的数据库操作及错误捕捉机制
Perl可以使用eval{};/if($@){}来捕捉错误.与c++和java的try/catch类似。
这里着重介绍一下数据库编程下的错误捕捉。
我这里使用的是DBI模块,数据库是MySQL。
1 首先是数据库连接模块。
my $database_name = "test";
my $database_host = "192.168.0.1";
my $database ="dbi:mysql:dbname=$database_name;host=$database_host";
my $db_user = "root";
my $db_password = "root";
sub connectDB
{
my $database ="dbi:mysql:dbname=$db_name;host=$db_host".":"."$db_port";
$dbh = DBI->connect($database,$db_user,$db_pswd,{RaiseError =>1,AutoCommit =>0,PrintError =>0}) or die "can't connect!: $DBI::errstr";
}
说明:
RaiseError =>1 用途:在DBI产生错误是抛出例外,使用eval时必须打开这个控制,打开错误产生,1为打开,0为关闭,
AutoCommit =>0 用途,自动事务处理。1为打开,0为关闭。
PrintError==>0 用途:DBI用警告方式显示错误信息,1为打开,0为关闭。
$DBI::errstr 为错误代码。
2 数据库操作部分:
eval{
$sth = $dbh->prepare( "SELECT * FROM test ;");
my $rc = $sth->execute;
while(@record_db_part= $sth->fetchrow_array){
#处理操作;
}
};
if($@) {
$errhandel=substr($@,30,16);
$err_connect=" Lost connection";
if ($errhandel eq $err_connect) {
#错误处理a;
}
else{
#错误处理b;
}
die;
}
$sth->finish;
$dbh->disconnect;
说明:
1 所有数据库操作部分写在eval{}块中。
2 eval抛出的错误存在$@中,错误处理写在if($@){}块中。
3 $sth为 statement handle,用来存储SELECT的结果。
4$dbh为database handle,用来操作数据库。
5 $sth->fetchrow_array 返回结果为数组。还有多种返回值可以选择。
$sth->bind_columns(undef, /$fields1, /$fields2, /$fields3, /$fields4); 绑定字段
6 $dbh->prepare( 'SELECT * FROM test;'); 所有select型语句用prepare();CREATE,DELETE用do();
7 $sth->finish;最好加上,否则有时会报错:DBI::db=HASH(0x812938)->disconnect invalidates 1 active statement handle
(either destroy statement handles or call finish on them before disconnecting)
at ./pdfshorten.pl line 37.
8 其他常用属性。
$rows = $sth->rows; 返回查询后的记录数。
Perl可以使用eval{};/if($@){}来捕捉错误.与c++和java的try/catch类似。
这里着重介绍一下数据库编程下的错误捕捉。
我这里使用的是DBI模块,数据库是MySQL。
1 首先是数据库连接模块。
my $database_name = "test";
my $database_host = "192.168.0.1";
my $database ="dbi:mysql:dbname=$database_name;host=$database_host";
my $db_user = "root";
my $db_password = "root";
sub connectDB
{
my $database ="dbi:mysql:dbname=$db_name;host=$db_host".":"."$db_port";
$dbh = DBI->connect($database,$db_user,$db_pswd,{RaiseError =>1,AutoCommit =>0,PrintError =>0}) or die "can't connect!: $DBI::errstr";
}
说明:
RaiseError =>1 用途:在DBI产生错误是抛出例外,使用eval时必须打开这个控制,打开错误产生,1为打开,0为关闭,
AutoCommit =>0 用途,自动事务处理。1为打开,0为关闭。
PrintError==>0 用途:DBI用警告方式显示错误信息,1为打开,0为关闭。
$DBI::errstr 为错误代码。
2 数据库操作部分:
eval{
$sth = $dbh->prepare( "SELECT * FROM test ;");
my $rc = $sth->execute;
while(@record_db_part= $sth->fetchrow_array){
#处理操作;
}
};
if($@) {
$errhandel=substr($@,30,16);
$err_connect=" Lost connection";
if ($errhandel eq $err_connect) {
#错误处理a;
}
else{
#错误处理b;
}
die;
}
$sth->finish;
$dbh->disconnect;
说明:
1 所有数据库操作部分写在eval{}块中。
2 eval抛出的错误存在$@中,错误处理写在if($@){}块中。
3 $sth为 statement handle,用来存储SELECT的结果。
4$dbh为database handle,用来操作数据库。
5 $sth->fetchrow_array 返回结果为数组。还有多种返回值可以选择。
$sth->bind_columns(undef, /$fields1, /$fields2, /$fields3, /$fields4); 绑定字段
6 $dbh->prepare( 'SELECT * FROM test;'); 所有select型语句用prepare();CREATE,DELETE用do();
7 $sth->finish;最好加上,否则有时会报错:DBI::db=HASH(0x812938)->disconnect invalidates 1 active statement handle
(either destroy statement handles or call finish on them before disconnecting)
at ./pdfshorten.pl line 37.
8 其他常用属性。
$rows = $sth->rows; 返回查询后的记录数。