こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ステートメントハンドルのクローズに失敗?

お世話になります。
早速ですが、WindowsXP+perl5.8.8+sqlite3の環境で以下のようなプログラムを作成しました。

#!/usr/bin/perl
use DBI;
$mydb = "mokdb";
$hDB = DBI->connect(
"dbi:SQLite:dbname=$mydb","","",{PrintError=>0}
);
$sql = "select * from tshoku";
$sth = $hDB->prepare($sql);
my $rv = $sth->execute;
while( my $rs = $sth->fetchrow_hashref ){
print $rs->{'ts_key'},"\n";
}
$sth->finish;
$hDB->disconnect;
exit;

これを実行すると、テーブル"tshoku"内の項目"ts_key"がずらっと表示されるのですが、その後、$hDB->disconnect;のタイミングで
"closing dbh with active statement handles"
という警告が表示されます。
$hDB->disconnect;の直前にステートメントハンドルはクローズしているにもかかわらずこのような警告が表示されてしまうのは何故でしょうか?

投稿日時 - 2008-01-19 15:21:08

QNo.3693859

すぐに回答ほしいです

質問者が選んだベストアンサー

DBD::SQLite の未解決の不具合と思われます。
http://rt.cpan.org/Public/Bug/Display.html?id=22688

下記は http://www.perlmonks.org/?node_id=619312 からの抜粋ですが、undef $sth することでエラーを回避できるようです。
----------------------------------------------------------------
$sth->finish;
#undef $sth; # to stop "closing dbh with active statement handles"
# http://rt.cpan.org/Ticket/Display.html?id=22688
$dbh->disconnect;
----------------------------------------------------------------

SQLite は使ったことがなく、これで回避できるという自信はありませんので、参考意見としてください。

投稿日時 - 2008-01-26 11:50:40

お礼

ご回答ありがとうございます。
ご回答いただいた内容を試してみたところ、見事に事象が発生しなくなりました。
「未解決の不具合」だったのかもしれません。

投稿日時 - 2008-01-26 12:02:12

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

余り自信ないですが、
commitか、rollbackを呼んだら、結果どうなりますか?

更新はしていないし、DBIのドキュメントともずれてしまいますが、
これで出なくなったことがあったような記憶があります。

投稿日時 - 2008-01-20 23:18:06

お礼

ご回答ありがとうございました。
connect時にAutoCommit=>0として$dbh->disconnectの直前に$dbh->commitとやってみたのですが、状況は変わりませんでした。

投稿日時 - 2008-01-26 12:03:53

あなたにオススメの質問