你能否将disconnect
-代码的部分内容作为线路噪声调用,还是将它保留原样?如果你是从你的程序退出已完成所有工作后,从数据库DBI:disconnect - question
use DBI;
my $dbh = DBI->connect ...
...
...
END {
$dbh->disconnect or die $DBI::errstr if $dbh;
}
你能否将disconnect
-代码的部分内容作为线路噪声调用,还是将它保留原样?如果你是从你的程序退出已完成所有工作后,从数据库DBI:disconnect - question
use DBI;
my $dbh = DBI->connect ...
...
...
END {
$dbh->disconnect or die $DBI::errstr if $dbh;
}
明确断开不是绝对必要的。但这是一个好主意,尤其是在执行多个连接或将执行多个顺序连接的程序中。
有关更多信息,请参阅Programming the Perl DBI。
链接已经死亡。这里有一个链接,当它最后有内容时它看起来像什么。 https://web.archive.org/web/20141018180208/http://oreilly.com/catalog/perldbi/chapter/ch04.html – Karl 2016-01-05 18:42:25
在脚本结束时,它可能没有多大关系。不过,无论如何,只要明确地清理一下就可以了。它肯定不会受到伤害,我怀疑可能会出现一些肯定会有所帮助的情况。
要小心。
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手柄测试()来破坏:如果禁用自动提交,并根据您是否断开不承诺你可以打一些有趣的情况下, 。
请注意,因为没有明确的断开连接,插入被回滚,我们得到一个错误。
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;'
这里看起来没有错,即使提交没有被调用,但行并没有进入数据库。因此,断开连接掩盖了行未提交的事实。
我不认为这是绝对必要的,但我觉得它更整洁。
至少,使用RaiseError或HandleError,你不需要'或死...' – runrig 2011-03-16 14:45:15