zoukankan      html  css  js  c++  java
  • dbi 句柄

    句柄定义了可以用来与数据库进行交互的三种主要对象, 这些对象被称为"句柄"(handle)。
    
    
    有为数据库驱动设计的驱动器程序句柄(Driver Handle),它是DBI用来创建数据库句柄(Database Handle的句柄,
    
    
    反过来,数据库句柄又可以创建处理单个数据库命令的语句句柄(Statement Handle),
    
    即语句(Statement).
    
    
    数据库句柄:
    
    数据库句柄是实际进行数据库操作的第一步,因为它封装了与一个特定数据库的连接。
    
    
    在数据库中执行SQL语句之前, 必须先实际于数据库进行连接(connect) 可以通过DBI的connect()方法实现:
    
    
    $dwh = DBI->connect($data_source,....);
    
    在DBI 规范和范例代码中,数据库句柄一般用$dbh.
    
    语句句柄:
    
    语句句柄 是DBI定义的数据库交互和操纵的最后一种对象,它封装了在数据库中执行的SQL语句。
    
    
    
    语句句柄是相应的数据库句柄的子类,由于语句句柄是在其权限之内的对象,所以一条语句中的数据不会被其他语句句柄所纂改。
    
    在DBI 规范和例子代码中,语句句柄一般用$sth表示
    
    
    slave:/root/test# cat a1.pl 
    use DBI;
    $database='zjzc';
    $user="root";
    $passwd="123456";
    $host="192.168.32.6";
    $dbh = DBI->connect("dbi:mysql:database=$database;host=$host;port=3306",$user,$passwd) or (die "can't connect to 
    
    database ", send_mail('zhaoyangjian@zjcap.cn', "test-database $database is lost"));
    print DBI->available_drivers();
    print "
    ";
    
    slave:/root/test# perl a1.pl 
    DBMExamplePFileGoferProxySQLiteSpongemysql
    
    
    下面的程序列举了系统中所有的驱动程序以及每一个驱动程序的数据源:
    
    断开连接:
    
    如果已经完成了所有的工作从应用程序中退出,没有必要从数据库中显示地断开连接,
    
    但这是一个好注意。 
    
    如果不显示断开连接,将有什么后果呢? 由于DBI句柄指的是Perl对象,Perl的垃圾收集器将来清除
    
    所有的任何无用对象。当程序中没有任何指向这个对象的引用, 或者Perl要退出时,Perl通过调用对象的DESTROY 
    
    方法来实现这个清除操作。
    
    
    默认地,DBI 将通过设置PrintError 属性进行自动错误检查,要去掉这个特性,只要将其值设为0或
    
    通过实例化的句柄也也可,或者,在使用数据库句柄的情况下,使用connect()方法的属性参数。
    
    
    use DBI;
    
    %attr = (
    PrintError => 0,
    RaiseError => 0
    );
    
    ###Connect
    #
    my  $dbName = 'oadb';  
    my  $dbUser = 'system';  
    my  $dbUserPass = 'a2p13mvh';  
    my  $dbh = DBI->connect("dbi:Oracle:$dbName", $dbUser, $dbUserPass) ;
    
    ###Re-enable arning-level automatic error reporting....
     $dbh->do("create table bb(id int)") or die($DBI::errstr);
     $dbh->do("insert into bb values(1)") or die($DBI::errstr);
    
    
    异常就不执行下面的SQL:
    
    
    
    自动错误检查:
    
    DBI 的自动错误检查作用在两个层次上,PrintError
    
    
    句柄属性告诉DBI 调用Perl 的warn()函数(这个函数常常导致遇到的错误打印在屏幕上)和RasiseError()
    
    
    
    句柄属性(这个属性让DBI 针对错误调用Perl的die()函数,一般导致程序立即退出)
    
    
    
    1.PrintError => 0 不通过warn() 报告错误
    
    2.RaiseError => 1  通过die 报告
    
    
    my  $dbh = DBI->connect("dbi:Oracle:$dbName", $dbUser, $dbUserPass,
    {PrintError => 0 ,
      RaiseError =>1}) ;
    
    
    $dbh->do("create table bb(id int)") or die($DBI::errstr)
    
    
    
    
    
    
    
    

  • 相关阅读:
    域名解析速度好快了。
    ASP生成图形(数字验证码)
    PHP过滤字符
    “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛F 最后一个是谁?(紫)
    “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛G 又是一个小游戏(蓝)
    面试题06 判断二叉树后序遍历的结果 [树]
    [acm] 动态规划相关的题目 [ 个人 ]
    [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 二分图 ]
    面试题02 从上往下打印二叉树 【树】[ water ]
    面试题05 树的子结构 [树]
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351218.html
Copyright © 2011-2022 走看看