7

-codeの一部をラインノイズと呼びますか、disconnectそれともそのままにしますか?

use DBI;

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

4 に答える 4

3

すべての作業を実行した後でプログラムを終了する場合は、データベースから明示的に切断する必要はありません。ただし、特に複数の接続を実行したプログラムや、複数の順次接続を実行するプログラムでは、これは良い考えです。

詳細については、PerlDBIのプログラミングを参照してください。

于 2011-03-16T12:27:40.243 に答える
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");'

DBD :: ODBC :: dbハンドルテストの明示的なdisconnect()を使用せずに、DESTROYによる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-16T13:25:20.667 に答える
0

スクリプトの最後では、おそらくそれほど重要ではありません。ただし、自分の後で明示的にクリーンアップするためだけに、とにかく追加する価値があるかもしれません。それは確かに傷つくことはなく、それが間違いなく役立ついくつかの状況があるかもしれないと私は思う。

于 2011-03-16T12:30:45.303 に答える
0

厳密には必要ないと思いますが、すっきりしています。

于 2011-03-16T15:17:28.630 に答える