首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBI:断开连接-问题

DBI:断开连接-问题
EN

Stack Overflow用户
提问于 2011-03-16 20:09:44
回答 4查看 7.5K关注 0票数 7

您会将disconnect-code的某些部分称为线路噪声,还是会保持原样?

代码语言:javascript
复制
use DBI;

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-16 20:27:40

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

有关详细信息,请参阅Programming the Perl DBI

票数 3
EN

Stack Overflow用户

发布于 2011-03-16 21:25:21

注意。如果您禁用了AutoCommit,并且根据是否断开连接而不提交,您可能会遇到一些有趣的情况:

代码语言:javascript
复制
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()。

注意,由于没有显式断开连接,插入被回滚,我们得到了一个错误。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-03-16 20:30:45

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5325036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档