首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBD:SQLite断开连接

DBD:SQLite断开连接
EN

Stack Overflow用户
提问于 2011-07-23 16:24:44
回答 1查看 2.9K关注 0票数 2

我编写了以下代码:

代码语言:javascript
复制
$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();

收到警告:

代码语言:javascript
复制
closing dbh with active statement handles at mysqlib.pl line 23

有人能解释一下这条警告信息的含义吗?

EN

回答 1

Stack Overflow用户

发布于 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“。

致以敬意,

杰弗里德

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6801734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档