龙空技术网

Perl 数据库模块的封装和调用

码农阿柏 18

前言:

如今小伙伴们对“封装后怎么调用”都比较讲究,兄弟们都需要了解一些“封装后怎么调用”的相关资讯。那么小编在网摘上收集了一些关于“封装后怎么调用””的相关资讯,希望我们能喜欢,大家一起来学习一下吧!

在项目开发的过程中,也经常遇到perl程序操作数据库的需求。

Perl 5 提供了 DBI 模块来连接和操作数据库。

但是需要怎样编写和封装才能写出简洁高效的数据模块,是需要思考的一个问题。

下面提供一个数据库模块封装的实例,以供参考。

1.编译安装DBI模块。(在这里省略)

2.封装数据库模块,以MYSQL为例。

###############################################################PerlDBI.pm#mysql数据库连接和操作模块#日期:2020/08/24#author:木白0101#############################################################package PerlDBI;use strict;use Encode;use DBI;use Constants;######time###############our($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());$year=1900+$year;$mon=$mon+1;our $logtime="$year-$mon-$mday $hour:$min:$sec\t";our $audit=0;##########构造函数###########sub new {    my $class = shift;       # 存储包的名字    my $self = {};           # 指向一个空的匿名散列    bless $self, ref($class) || $class;  #bless散列到当前包    my $username=Constants::MYSQL_USERNAME; #db_username    my $password=Constants::MYSQL_PASSWORD; #db_password    my $host=Constants::MYSQL_HOST;                            #db_host    my $dbname=Constants::MYSQL_DATABASE;    my $dbh = DBI->connect("DBI:mysql:$dbname;$host", $username, $password,{mysql_auto_reconnect => 1}) or logger($self->{_dbh}->errstr," ");    $dbh->do("SET character_set_client = 'utf8'");    $dbh->do("SET character_set_connection = 'utf8'");    $dbh->do("SET character_set_results= 'utf8'");    $dbh->do("SET NAMES 'utf8'");    $dbh->{AutoCommit} = 0;    $self->{_dbh}=$dbh;    return $self;  }############查询函数返回多行记录############参数:sql#返回:hash数组############查询函数返回多行记录###########sub func_select_rows{    my $self = shift;    my $sql = shift;    #参数sql    my @result;    my $sth = $self->{_dbh}->prepare($sql) or logger($self->{_dbh}->errstr,$sql);    $sth->execute() or logger($self->{_dbh}->errstr,$sql);    while (my $rowref = $sth->fetchrow_hashref()) {        push(@result,$rowref);    }    $sth->finish();        return @result;}############查询函数返回一行记录############参数:sql#返回:hash############查询函数返回一行记录###########sub func_select_one{    my $self = shift;    my $sql = shift;    #参数sql    my $sth = $self->{_dbh}->prepare($sql) or logger($self->{_dbh}->errstr,$sql);    $sth->execute()  or logger($self->{_dbh}->errstr,$sql);    my $rowref = $sth->fetchrow_hashref();    $sth->finish();    return $rowref;}############插入、更新、删除函数############参数:sql#返回:rows 影响条数############插入、更新、删除函数###########sub func_do{    my $self = shift;    my $sql = shift;        #sql参数    my $rows = $self->{_dbh}->do($sql)  or logger($self->{_dbh}->errstr,$sql);            return $rows;}sub quote{    my $self = shift;    my $param = shift;    return $self->{_dbh}->quote($param);}###########COMMIT###########sub commit{    my($self) = @_;    $self->{_dbh}->commit() or die $self->{_dbh}->errstr;}###########ROLLBACK#########sub rollback{    my($self) = @_;    $self->{_dbh}->rollback() or die $self->{_dbh}->errstr;}###########析构函数,断开DB连接###########sub disconnect{    my($self) = @_;    $self->{_dbh}->disconnect() or die $self->{_dbh}->errstr;}sub logger{    my($msg,$sql) = @_;    my $errpath=Constants::LIB_DIR."/errsql.log";    open OUT,">>$errpath" or die $!;    print OUT $logtime."\t".$msg."\t".$sql."\n";    close OUT;}1;

3.程序调用数据库模块

################################################################auto_db_access.pl##数据库操作示例#日期:2020/08/24#author:木白0101#############################################################use warnings;use strict;use Data::Dumper;use PerlDBI;    #引用数据库模块my $dbi = new PerlDBI;#查询多行my $site_sql = "select chr,sta_pos,end_pos from read_range";my @hash_site_result = $dbi->func_select_rows($site_sql);my $regions = "";foreach my $read_range(@hash_site_result){    my $chr_read = $read_range->{"chr"};    my $sta_pos = $read_range->{"sta_pos"};    my $end_pos = $read_range->{"end_pos"};}#查询单行my $user_info = $dbi->func_select_one("select sample_no,sex,birth_date from user_info where sample_no like '%".$sample_no."%'");my $gender = $user_info->{"sex"};#数据库操作my $insert_sql = "insert into user_info(sample_no,sex,birth_date)values('test','male','2020-08-24')";my $rows = $dbi->func_do($insert_sql);$dbi->commit();#关闭连接$dbi->disconnect();

这样就完成了perl代码数据库访问模块的封装,以供参考。

标签: #封装后怎么调用 #perl调用其他pl中的方法 #perl调用存储过程 #javamysql封装