Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->数据库应用 ->DB2 ->正文

通过Perl 编程访问DB2数据库

来源:IBM DW中国 作者:Marina Greenstein  时间:2007-04-22 点击: [收藏] [投稿]
state 方法。例如,要返回与数据库句柄 $dbhandle 相关的 SQLSTATE ,可以在应用程序中使用下面的 Perl 语句:

my $sqlstate = $dbhandle->state;

为了返回与某个 Perl DBI 数据库句柄或语句句柄相关的 SQLCODE,可以调用 err 方法。例如,要返回与数据库句柄 $dbhandle 相关的 SQLCODE,可以在应用程序中使用下面的 Perl 语句:

my $sqlcode = $dbhandle->err;

errstr 方法返回与某个 Perl DBI 数据库句柄或语句句柄相关的 SQLCODE 的消息。我推荐使用这个方法,因为这个方法可以给出有关 SQL 语句失败的更多信息。

清单 3 中的例子展示了这个方法的用法:


清单 3. 返回错误消息的 errstr 方法

$dbh = DBI->connect("dbi:DB2:sample",“USERID",“password") or 
            die “Can't connect to sample database: $DBI::errstr";

$sth = $dbh->prepare(“SQL statement“) or   die "Cannot prepare: " $dbh->errstr;

$sth->>execute() or   die "Cannot execute: " $sth->errstr; 

现在让我们进一步看一下第一个实验。它展示了一个 Perl 程序,这个程序使用作为参数传入的用户 ID 和密码来连接数据库 SAMPLE。当传递了有效的 ID 和密码时,它会返回一条消息说明连接成功了。下面是 lab1.pl 的代码:


清单 4. lab1.pl

#!/usr/local/bin/perl –w

  use DBI;
  $db2user = $ARGV[0];
  $pasw = $ARGV[1];   
  
# Open a connection 

  $dbh = DBI->connect("dbi:DB2:sample", $db2user, $pasw)  or 
                                         “Can't connect to sample database: $DBI::errstr";
  print "Connection is successful !!\n";

图 2 给出了使用有效身份验证和无效身份验证来执行这个程序的结果:


图 2. 执行 lab1.pl
执行 lab1.pl

执行 SQL 语句

下面让我们来编写一个程序,在数据库 SAMPLE 中创建一个表 PT_ADDR_BOOK。要执行在编写应用程序时就已经知道的 SQL 语句,可以使用 $dbh->do 方法。这个方法的语法如下所示:

my $cnt = $dbh->do(SQL statement);

其中 $cnt 是这条 SQL 语句所影响的行数。

使用这个方法,我们的程序创建了一个 DB2 表,如清单 5 所示:


清单 5. 用来创建 DB2 表的程序

 #!/usr/local/bin/perl -w
  use DBI;
  use DBD::DB2::Constants;
  $dbh = DBI->connect("dbi:DB2:sample","","") or
        die “Can't connect to sample database: $DBI::errstr"; 
  $rcount = $dbh->do (“CREATE TABLE PT_addr_book(name char(30),
  					    phone char(10))");
  print “Returns: $rcount\n";

可以使用相同的 do 方法向 PT_addr_book 表中插入几行数据。请注意,所插入行的值在编写这个程序时都是已知的,因此可以硬编码在代码中。


清单 6. 使用 do 方法插入几行数据

#!/usr/local/bin/perl -w
  use DBI;
  use DBD::DB2::Constants;
  $dbh = DBI->connect("dbi:DB2:sample","","") or
    die "Can't connect to sample database: $DBI::errstr"; 
  $rcount = $dbh-> do ("Insert into PT_ADDR_BOOK values
                                                ('Gregory Whales','9142712020'),
                                                ('Robert Moses', 2127652345')");
  print "Returns: $rcount \n";

正如从这个例子中可以看到的,这条 SQL 语句会影响两行数据。通过在 DB2 CLP 中对这个表运行 SELECT 语句,可以确定有两行数据已经插入了这个表中。


清单 7. test_do_exs.pl

$perl test_do_exs.pl
Returns : 2

$db2 “select * from PT_ADDR_BOOK"
NAME                               PHONE     
------------------------------ ----------
Gregory Whales                 9142712020
Robert Moses                   2127652345

  2 record(s) selected.

下面让我们从 下载 一节中实验 2 的练习开始,编写并执行一个简单的 Perl 程序来更新 PR_ADDR_BOOK 表。

INSERT、UPDATE 和 DELETE 语句 —— 没有占位符

执行一条在编写应用程序时还未确定的 SQL 语句(动态 SQL)需要使用一种不同的技术,可以使用 $dbh->prepare 方法来实现。动态 SQL 可以通过在程序执行过程中自己修改列、表和谓词(操作)的能力来实现。动态 SQL 需要由 UDB 优化器来准备 执行,目的是为这条语句创建一个访问计划。如果动态 SQL 没有参数标记(占位符),它就可以在这个步骤之后立即执行。清单 8 给出了

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:基于DB2的数据库应用系统的性能优化   下一篇:IBM DB2数据库日常维护小常识

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号