您是否会将disconnect
代码的某些部分称为线路噪音,还是将其保留原样?
use DBI;
my $dbh = DBI->connect ...
...
...
END {
$dbh->disconnect or die $DBI::errstr if $dbh;
}
答案 0 :(得分:3)
如果您在执行完所有工作后退出程序,则不必严格断开与数据库的连接。但这是一个好主意,特别是在您执行多个连接或将执行多个顺序连接的程序中。
有关详细信息,请参阅Programming the Perl DBI。
答案 1 :(得分: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");'
由于DESTROY而发出rollback()而没有DBD :: ODBC :: db handle test的显式disconnect()。
注意,因为没有显式断开连接,所以插入回滚,我们收到错误。
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但是行没有进入数据库。因此,断开连接掩盖了未提交行的事实。
答案 2 :(得分:0)
在剧本结束时,它可能并不重要。然而,无论如何,添加它可能是值得的,只是为了明确清理自己。它肯定不会受到伤害,我怀疑可能会有一些情况肯定会有所帮助。
答案 3 :(得分:0)
我认为这不是绝对必要的,但我发现它更整洁。