Perl DBI 数据库 *** 作

Perl DBI 数据库 *** 作,第1张

概述本次会议将教你如何使用PERL访问Oracle数据库和其他数据库。 Oraperl模块以访问Oracle,请查看Oraperl手册。 DBI模块使用通用的方式来访问数据库。在本章中,我们将讨论这个模块。 自Perl 5中已经变得非常容易使用DBI编写数据库应用程序. DBI代表独立于数据库的接口Perl DBI为Perl代码和底层数据库之间提供了一个抽象层,这意味着, 让你可以很容易地切换数据库的

本次会议将教你如何使用PERL访问Oracle数据库和其他数据库。

Oraperl模块以访问Oracle,请查看Oraperl手册。

DBI模块使用通用的方式来访问数据库。在本章中,我们将讨论这个模块。

自Perl 5中已经变得非常容易使用DBI编写数据库应用程序. DBI代表独立于数据库的接口Perl DBI为Perl代码和底层数据库之间提供了一个抽象层,这意味着,让你可以很容易地切换数据库的实现方式。

DBI是一个Perl 编程语言的数据库访问模块。 它定义了一套方法,变量和约定来提供一个一致的数据库接口,独立于实际使用的数据库。

DBI应用程序的体系结构

DBI是独立于现有的任何数据库在后端。无论你正在使用Oracel,MysqL,Informix等,您可以使用DBI。下面是一个结构图。

DBI是负责所有通过API,应用程序编程接口执行sql命令,并派遣他们实际执行相应的驱动程序。最后DBI是负责任的驱动程序,它给调用scritp结果。

标记和惯例

整个这一章中,将使用下面的符号并且它建议,你也应该遵循相同的约定。

  $dsn    Database source name  $dbh    Database handle object  $sth    Statement handle object  $h      Any of the handle types above ($dbh,$sth,or $drh)  $rc     General Return Code  (boolean: true=ok,false=error)  $rv     General Return Value (typically an integer)  @ary    List of values returned from the database.  $rows   Number of rows processed (if available,else -1)  $fh     A filehandle - by www.yiibai.com  undef   NulL values are represented by undefined values in Perl  \%attr  Reference to a hash of attribute values passed to methods
数据库连接

假设我们要使用MysqL数据库。连接到数据库之前,请确保以下:

你已经创建了数据库 TESTDB。

你已经创建表TEST_table 在 TESTDB中。

这个表有以下几个字段 FirsT_name,LAST_name,AGE,SEX 和 INCOME.

数据库用户ID(用户名) "testuser" 和密码 "test123" 设置正确能访问到 TESTDB

Perl DBI模块已经安装在你的机器上。

你已经经历了MySQL教程,并学习了解MysqL的基础。

以下是一个连接到 MysqL 数据库 "TESTDB"的例子

#!/usr/bin/perluse DBIuse strict;  my $driver = "MysqL";   my $database = "TESTDB";  my $dsn = "DBI:$driver:database=$database";  my $userID = "testuser";  my $password = "test123";  my $dbh = DBI->connect($dsn,$userID,$password )               or dIE $DBI::errstr;

如果建立与数据源的连接,然后将返回一个数据库句柄,并保存到$dbh为进一步使用,否则$dbh设置为undef值和$DBI :: errstr返回一个错误字符串。

插入 *** 作

你要创建或写入表TEST_table记录时,INSERT *** 作是必需的。因此,一旦我们建立数据库连接,我们准备创建记录TEST_table。以下是创建单记录到TEST_table的步骤。以类似的方式,您可以创建多条记录。

记录创建需要以下步骤

准备SQL语句使用INSERT语句。这项工作将使用prepare() API.

执行SQL查询从数据库中选择的结果。这将通过使用execute() API.

释放语句句柄。通过使用finish() API

如果一切顺利,然后 commit此 *** 作,否则你可以rollback 完成事务。提交和回滚解释在接下来的章节。

 my $sth = $dbh->prepare("INSERT INTO TEST_table                          (FirsT_name,SEX,INCOME )                           values                          ('john','poul','M',30,13000)"); $sth->execute() or dIE $DBI::errstr; $sth->finish(); $dbh->commit or dIE $DBI::errstr;
使用绑定值

当没有事先给出被输入的值时,有可能出现一种情况。 在这样的情况下,绑定的值被使用。使用一个问号代替实际值和实际值,然后通过execute() API。

 my $first_name = "john"; my $last_name = "poul"; my $sex = "M"; my $income = 13000; my $age = 30; my $sth = $dbh->prepare("INSERT INTO TEST_table                          (FirsT_name,INCOME )                           values                          (?,?,?)"); $sth->execute($first_name,$last_name,$sex,$age,$income)              or dIE $DBI::errstr; $sth->finish(); $dbh->commit or dIE $DBI::errstr;
读取 *** 作

任何数据库的读 *** 作是指从数据库中获取一些有用的信息。因此,一旦我们建立数据库连接,我们已经准备好到这个数据库中进行查询。以下是程序查询年龄大于20的所有记录。这将需要四个步骤

准备sql基于SQL查询所需的条件。这项工作将使用prepare() API.

执行SQL查询从数据库中选择的结果。这项工作将使用execute()API。

提取所有结果一个接一个,打印这些结果。这将使用 fetchrow_array() API.

释放语句句柄。这将使用 finish() API

  my $sth = $dbh->prepare("SELECT FirsT_name,LAST_name                           FROM TEST_table                            WHERE AGE > 20");  $sth->execute() or dIE $DBI::errstr;  print "Number of rows found :" + $sth->rows;  while (my @row = $sth->fetchrow_array()) {     my ($first_name,$last_name ) = @row;     print "First name = $first_name,Last name = $last_name\n";  }  $sth->finish();
还没有事先给出的条件时,有可能出现一种情况。在这样的情况下,绑定的值被使用。采用的是一个问号代替实际值和实际值,然后通过execute() API. 下面的例子。

$age = 20;  my $sth = $dbh->prepare("SELECT FirsT_name,LAST_name                           FROM TEST_table                           WHERE AGE > ?");  $sth->execute( $age ) or dIE $DBI::errstr;  print "Number of rows found :" + $sth->rows;  while (my @row = $sth->fetchrow_array()) {     my ($first_name,Last name = $last_name\n";  }  $sth->finish();
更新 *** 作

任何数据库更新 *** 作意味着已经可以在数据库中更新一个或多个记录。以下是更新所有的记录SEX 更新为'M'的过程。 在这里,我们将增加AGE的所有男性一年。 这将需要三个步骤

准备SQL查询基于所需的条件。这项工作将使用 prepare() API.

执行SQL查询从数据库中选择的结果。这项工作将使用execute() API.

释放语句句柄。这项工作将使用finish() API

如果一切顺利,然后提交此 *** 作,否则你可以回滚完成事务。请参阅下一节的提交和回滚的API。

  my $sth = $dbh->prepare("UPDATE TEST_table                           SET   AGE = AGE + 1                            WHERE SEX = 'M'");  $sth->execute() or dIE $DBI::errstr;  print "Number of rows updated :" + $sth->rows;  $sth->finish(); // by www.yiibai.com  $dbh->commit or dIE $DBI::errstr;
如果没有事先给出的条件时,有可能出现一种情况。在这样的情况下,绑定的值被使用。采用的是一个问号代替实际值和实际值,然后通过 execute()API.,下面的例子。

$sex = 'M';  my $sth = $dbh->prepare("UPDATE TEST_table                           SET   AGE = AGE + 1                           WHERE SEX = ?");  $sth->execute('$sex') or dIE $DBI::errstr;  print "Number of rows updated :" + $sth->rows;  $sth->finish();  $dbh->commit or dIE $DBI::errstr;

在某些情况下,你想设置一个值,这是不预先给定的,所以你可以使用绑定值如下。在此示例中,将被设置的所有男性收入为10000。

$sex = 'M';  $income = 10000;  my $sth = $dbh->prepare("UPDATE TEST_table                           SET   INCOME = ?                           WHERE SEX = ?");  $sth->execute( $income,'$sex') or dIE $DBI::errstr;  print "Number of rows updated :" + $sth->rows;  $sth->finish();
删除 *** 作

DELETE *** 作是必需的,当你想从数据库中删除一些记录。下面的程序是删除TEST_table所有年龄等于30的记录。 此 *** 作将采取以下措施。

准备SQL查询基于所需的条件。这项工作将使用 prepare() API。

执行SQL查询到所需的记录,从数据库中删除。这项工作将使用 execute() API.

释放语句句柄。 这项工作将使用 finish() API

如果一切顺利,然后提交此 *** 作,否则你可以回滚完成事务。

  $age = 30;  my $sth = $dbh->prepare("DELETE FROM TEST_table                           WHERE AGE = ?");  $sth->execute( $age ) or dIE $DBI::errstr;  print "Number of rows deleted :" + $sth->rows;  $sth->finish();  $dbh->commit or dIE $DBI::errstr;
使用do 语句

如果你在使用UPDATE,INSERT,DELETE,那将没有返回从数据库中的数据,所以,有一个捷径来执行此 *** 作。您可以使用 do 语句执行的任何命令。

$dbh->do('DELETE FROM TEST_table WHERE age =30');

do 返回一个值假如它执行成功,如果失败返回false值。其实,如果成功的话返回受影响的行数。在这个例子中,它会返回实际删除的行数。

提交 *** 作 Commit是 *** 作数据库来完成的变化给出了一个绿色的信号,此 *** 作后没有变化,可以恢复。 下面是一个简单的例子来调用commit API.

$dbh->commit or dIE $dbh->errstr;
回滚 *** 作

如果您不满意的变化,你想恢复这些变化,然后使用 rollback API.

下面是一个简单的例子来调用 rollback API.

$dbh->rollback or dIE $dbh->errstr;
开始事务

许多数据库支持事务。这意味着,你可以做一大堆的查询将要修改的数据库,但实际上是没有变化。 然后在结束时发出特殊的SQL查询语句:COMMIT,然后所有的修改同时进行。或者您可以发出查询 RolLBACK,在这种情况下,所有查询都被丢弃。

begin_work API使事务(通过关闭自动提交),直到下一次调用commit或rollback。 一个COMMIT或RolLBACK后,自动提交将被自动打开了。

$rc  = $dbh->begin_work   or dIE $dbh->errstr;
自动提交选项

如果你的事务很简单,你可以保存,不用发出了很多提交。当您连接调用,您可以指定一个自动提交选项,将执行自动提交 *** 作后,每一个成功的查询。这里它看起来像:

my $dbh = DBI->connect($dsn,$password,{autoCommit => 1})               or dIE $DBI::errstr;

在这里,将autoCommit值设置为1或0。

自动错误处理

当你连接调用,你可以指定一个引发错误的选项,自动为您处理错误。当发生错误时,DBI将终止您的程序,而不是返回一个故障代码。如果你想要的是中止程序上的错误,这可能是方便。这里它看起来像这样:

 这里raiseerror 值可以是1或0。

断开数据库链接

要断开数据库连接,使用disconnect API.

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

本次事务行为与disconnect方法,是不确定的。 一些数据库系统(如Oracle和Ingres)会自动提交所有未完成的更改, 但另一些(如Informix)将回滚任何未完成的更改。 不使用自动提交的应用程序必须显式的调用commit或rollback,然后再调用断开。

总结

以上是内存溢出为你收集整理的Perl DBI 数据库 *** 作全部内容,希望文章能够帮你解决Perl DBI 数据库 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1275844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存