DBI:disconnect - 问题

7
你会将disconnect代码的部分称为线噪声吗?还是保留原样?
use DBI;

my $dbh = DBI->connect ...
...
...
END {
    $dbh->disconnect or die $DBI::errstr if $dbh;
}

1
至少使用RaiseError或HandleError,您不需要“or die ...” - runrig
4个回答

3

如果您在完成所有工作后退出程序,则不一定需要从数据库进行显式断开连接。但是,在执行多个连接或将执行多个顺序连接的程序中,这是一个好主意。

更多信息,请参见《编程Perl DBI》


链接已失效。以下是一个链接,它展示了该链接最后一次具有内容时的样子。https://web.archive.org/web/20141018180208/http://oreilly.com/catalog/perldbi/chapter/ch04.html - Karl

2

小心。如果禁用AutoCommit并且没有根据是否断开连接提交,可能会遇到一些有趣的情况:

perl -le 'use DBI;my $h = DBI->connect("dbi:ODBC:test","test","test", {AutoCommit => 0, RaiseError=>1}); $h->do(q/insert into mje values(?, ?)/, undef, 1, "fred");'

由于未对DBD::ODBC::db句柄进行显式断开连接,因此发出rollback()。

请注意,由于没有显式断开连接,插入被回滚并出现错误。

perl -le 'use DBI;my $h = DBI->connect("dbi:ODBC:test","test","test", {AutoCommit => 0, RaiseError=>1}); $h->do(q/insert into mje values(?, ?)/, undef, 1, "fred");$h->disconnect or die $DBI::errstr;'

尽管没有调用commit,这里似乎没有任何问题,但行没有被插入到数据库中。因此,断开连接掩盖了行未提交的事实。


0
在脚本的末尾,这可能并不重要。然而,为了明确地清理自己的工作,添加它可能是值得的。这肯定不会有坏处,我怀疑在一些情况下它肯定会有帮助。

0

我不认为这是严格必要的,但我觉得这样更整洁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接