手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

通过Perl 编程访问DB2数据库

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


清单 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 给出了 $dbh->prepare$sth->execute 方法的语法,能够在 Perl 程式中用来执行没有占位符的嵌入式 SQL 语句:


清单 8. 动态 SQL 的准备和执行


            $stmt = “SQL Statement without placeholder“;

            $sth = $dbh->prepare($stmt);

            $sth->execute();

            

请注意,$dbh->prepare 方法的结果是 SQL 语句句柄。

清单 9 中给出的 Perl 程式展示了如何使用这些方法将一行数据插入到 PT_ADDR_BOOK 表中:


清单 9. 插入一行数据


            #!/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";

            $stmt = "INSERT INTO PT_addr_book values ('JOHN SMITH','9145556677')“;

            $sth = $dbh->prepare($stmt);

            $sth->execute();

            print "We inserted row into addr_book\n";

            $sth->finish();

            

具备参数标记的 SQL 语句

现在让我们来看一下如何执行在编写应用程式时还不确定并且具备参数标记(即占位符)的 SQL 语句 —— 即真正的动态 SQL 语句。请注意,我们推荐使用这种 SQL 语句,因为他们具备性能和安全性方面的长处。从性能的角度来看,动态 SQL 语句只需要准备一次就能够执行多次,能够重用相同的数据库访问计划。从安全性的角度来看,占位符能够确保只有一个值能够插入到这条语句中,从而能够避免出现 SQL 语句错误。

为了让 Perl 程式将动态 SQL 语句转换成可执行的格式,需要首先使用 prepare 方法,然后使用 bind_param 方法来绑定参数。只有这样才能够执行这条语句。要绑定每个参数,需要指定参数标记的个数,连同包含这些参数标记值的本地 Perl 变量的名字。清单 10 给出了让 Perl 程式执行动态 SQL 语句所使用的方法的语法:


清单 10. 动态 SQL 的方法


            $stmt = “SQL Statement with parameter marker“;

            $sth = $dbh->prepare($stmt);

            $sth->bind_param(1,$parm,\% attr);

            $sth->execute();

            

清单 11 展示了对表 PT_ADDR_BOOK 执行 INSERT 操作的方法。现在,所插入列的值不再是在 SQL 语句中硬编码的了,而是使用参数标记动态传递给这条语句的;这些参数标记已使用 $sth->bind_param 方法和这条语句进行了绑定。只有完成这些配置之后,才开始执行这条语句。


清单 11. 对表 PT_ADDR_BOOK 执行 INSERT 操作


            #!/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";

            $name ="STEVE BROWN";

            $phone = "7184358769";

            $stmt = "INSERT INTO PT_addr_book values (?,?)";

            $sth = $dbh->prepare($stmt);

            $sth->bind_param(1,$name);

            $sth->bind_param(2,$phone);

            $sth->execute();

            print "We inserted row into addr_book\n";

            $sth->finish();

            

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!