免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1763 | 回复: 2
打印 上一主题 下一主题

数据库访问失败后但程序不终止的办法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-26 15:49 |只看该作者 |倒序浏览
现在做一个对数据库追加和删除的perl 程序,程序本身做成了Daemon化(当然不Daemon也可以)。
这个程序接受客户端的消息,然后取得一些客户的信息后,根据情况对数据库进行删除和追加操作。
对于正常的操作程序在背后运行的没有问题,但是如果在操作数据库时发生了错误(比如追加已经存在的项目等)
,那么程序就自动终止了。这不是我想看到的,我想让这个程序一直在背后运行,即使是数据库操作时放生错误
也继续转,等待下一次正确的操作。 不知道我描述清楚了没有,呵呵。
下面是我写的代码。
while(1) {
        #sleep 1;
        if (seek(FH,0,1)){
                while(<FH> {
                        chomp $_;
                        if( $_ =~
                                m{
                                。。。。。

                              }x
                                ){
                                       
                                        seek (FH, 0, 2);                     
                                        sleep 1;
                                        $myobj -> doInsert($1,$2);                                       
                                }
                }
        }

}


下面是数据库的操作
sub doInsert{
    my $self = shift;


    my $dbh = DBI->connect(
        "dbig:host=10.1.0.22;dbname=qu_db",
        "dbuser", "dbuser", {RaiseError => 1, AutoCommit => 1}) or
        die "CONNECT ERROR $DBI::errstr";

    my $sth = $dbh->prepare("INSERT INTO t_allow \
        (name, addr, fixed) VALUES (?,?,?)";

        $sth->execute($A, $B, $C);

    $dbh->disconnect();

    return;
}


在 $sth->execute($A, $B, $C);执行时如果出现了错误程序就自动终止了,有谁知道让程序不终止然后继续回到我的主程序继续运行的
方法?

论坛徽章:
0
2 [报告]
发表于 2006-10-26 15:56 |只看该作者
你把DBI中的RaiseError值赋为0,不让系统在DBI操作出错时中止程序。看看是否符合你的要求!

论坛徽章:
0
3 [报告]
发表于 2006-10-26 16:00 |只看该作者
eval();
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP