您会将部分disconnect
代码称为线路噪音还是保持原样?
use DBI;
my $dbh = DBI->connect ...
...
...
END {
$dbh->disconnect or die $DBI::errstr if $dbh;
}
您会将部分disconnect
代码称为线路噪音还是保持原样?
use DBI;
my $dbh = DBI->connect ...
...
...
END {
$dbh->disconnect or die $DBI::errstr if $dbh;
}
如果您在执行完所有工作后要退出程序,则不需要显式断开与数据库的连接。但这是一个好主意,尤其是在您已执行多个连接或将执行多个顺序连接的程序中。
有关详细信息,请参阅Perl DBI 编程。
当心。如果您禁用 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 没有 DBD::ODBC::db 句柄测试的显式 disconnect() 而发出 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;'
即使未调用提交但行没有进入数据库,这里似乎也没有任何问题。因此,断开连接掩盖了行未提交的事实。
在脚本的结尾,它可能并不重要。然而,无论如何添加它只是为了在你自己之后明确地清理它可能是值得的。它肯定不会受到伤害,我怀疑在某些情况下它肯定会有所帮助。
我认为这不是绝对必要的,但我觉得它更整洁。