我编写了以下代码:
$dbh = DBI->connect('dbi:SQLite:mysqlite.db', "", "") || die "Cannot connect: $DBI::errstr";
my $sth = $dbh->prepare("select value1, value2 from valus_table where value2 = 4");
$sth->execute();
while (my @row = $sth->fetchrow_array) {
print $row[0], $row[1], "\n";
}
$sth->finish;
$dbh->disconnect();收到警告:
closing dbh with active statement handles at mysqlib.pl line 23有人能解释一下这条警告信息的含义吗?
发布于 2011-07-23 16:53:31
您提交的代码是正确的(除了第1行的语法错误)。
此外,您的错误是在线" 23“,您的张贴代码没有23行。
我认为错误在代码中的其他地方。
编辑:您使用什么版本的SQLite模块?我目不转睛地发现:http://www.perlmonks.org/?node_id=665714
问题是DBD::SQlite>disconnect()方法执行sqlite3_close()函数。如果有活动语句,此函数将返回SQLITE_BUSY。在尝试关闭sqlite3对象之前,应用程序应该完成所有准备好的语句并关闭与sqlite3对象相关的所有BLOB。目前,DBD::SQLite只能通过破坏方法来完成语句。在最简单的情况下,您可以始终使用"undef $sth“,或者等到它超出范围时才能完成语句。但是,如果您通过缓存(prepare_cached)准备了语句,那么它将不适用于您,因为语句直到进入DBI缓存。在这种情况下,我们只能通过对数据库处理程序的破坏来调用缓存语句上的破坏。我们可以通过"undef $dbh“来实现它。"undef $dbh“-将关闭所有缓存的语句和关闭数据库,没有任何错误。结论:避免对DBD::SQLite使用$dbh->disconnect(),而使用"undef $dbh“。
致以敬意,
杰弗里德
https://stackoverflow.com/questions/6801734
复制相似问题