DBI: отключить - вопрос - PullRequest
       11

DBI: отключить - вопрос

7 голосов
/ 16 марта 2011

Вы бы назвали части кода disconnect линейным шумом или оставили бы его как есть?

use DBI;

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

Ответы [ 4 ]

3 голосов
/ 16 марта 2011

Явное отключение от базы данных не является строго обязательным, если вы выходите из своей программы после выполнения всей работы. Но это хорошая идея, особенно в программах, в которых вы выполнили несколько соединений или будете выполнять несколько последовательных соединений.

См. Программирование Perl DBI для получения дополнительной информации.

2 голосов
/ 16 марта 2011

Будь осторожен. Вы можете столкнуться с некоторыми интересными ситуациями, если отключите 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.

Обратите внимание, поскольку не было явного отключения, вставка была отменена, и мы получили ошибку.

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 не был вызван, но строки не попали в базу данных. Таким образом, разъединение скрывало тот факт, что строки не были зафиксированы.

0 голосов
/ 16 марта 2011

Я не думаю, что это строго необходимо, но я нахожу это аккуратнее.

0 голосов
/ 16 марта 2011

В конце сценария это, вероятно, не имеет большого значения. Однако, может быть, стоит добавить его в любом случае, просто чтобы убрать за собой. Это определенно не повредит, и я подозреваю, что может быть несколько ситуаций, когда это определенно поможет.

...