您会将disconnect-code的某些部分称为线路噪声,还是会保持原样?
use DBI;
my $dbh = DBI->connect ...
...
...
END {
$dbh->disconnect or die $DBI::errstr if $dbh;
}发布于 2011-03-16 20:27:40
如果要在执行完所有工作后退出程序,则不一定要显式断开与数据库的连接。但这是一个好主意,特别是在执行了多个连接或将执行多个顺序连接的程序中。
有关详细信息,请参阅Programming the Perl DBI。
发布于 2011-03-16 21:25:21
注意。如果您禁用了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,但是行没有进入数据库,看起来也没有什么问题。因此,断开连接掩盖了行未提交的事实。
发布于 2011-03-16 20:30:45
在脚本的末尾,这可能并不重要。然而,添加它可能是值得的,只是为了明确地清理一下自己。这当然不会有什么坏处,而且我怀疑在某些情况下它肯定会有所帮助。
https://stackoverflow.com/questions/5325036
复制相似问题