DBD:SQLite断开连接

时间:2011-07-23 16:24:45

标签: perl sqlite cpan dbi

我写了下面的代码:

$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

有人可以解释这条警告信息的含义吗?

1 个答案:

答案 0 :(得分:3)

您发布的代码是正确的(第1行的语法错误除外)

此外,您的错误在“23”行,而您发布的代码没有23行。

我认为错误是您代码中的其他位置。

编辑: 你使用什么版本的SQLite模块?我瞪了一眼,发现:http://www.perlmonks.org/?node_id=665714

  

问题是DBD :: SQlite-> disconnect()方法执行   sqlite3_close()函数。如果是,此函数返回SQLITE_BUSY   有任何积极的声明。来自API:“应用程序应该   完成所有准备好的语句并关闭与之关联的所有BLOB   尝试关闭sqlite3对象之前的sqlite3对象。“   目前,DBD :: SQLite只能通过DESTROY方法完成语句。   在最简单的情况下,您可以始终使用“undef $ sth”或等待直到它   超出范围,最终确定声明。但如果你准备好了   通过缓存(prepare_cached)语句它不适合你,因为   语句直到DBI缓存中。在这种情况下,我们可以调用DESTROY   在我们的缓存语句中仅通过DESTROY用于数据库处理程序。和我们   可以通过“undef $ dbh”实现它。 “undef $ dbh” - 将关闭所有缓存   语句和关闭数据库没有任何错误。结论:避免   对DBD :: SQLite使用$ dbh-> disconnect(),而不是使用“undef $ dbh”。

此致

jfried