安装MySQL驱动程序后,Perl SQLite驱动程序停止工作

安装MySQL驱动程序后,Perl SQLite驱动程序停止工作,mysql,perl,sqlite,Mysql,Perl,Sqlite,我一直成功地将Perl与SQLite结合使用,使用了DBI和DBD::SQLite 最近,我在我的Ubuntu系统上安装了MySQL客户端和服务器,以及DBD::MySQL。MySQL工作得很好,但在安装Perl模块后,我在SQLite上运行了另一个项目,得到的消息是没有DBD::SQLite 我使用CPAN重新安装了DBD::SQLite,现在我创建的数据库似乎不再是有效文件。如果我创建这样一个非常简单的数据库 my $dbh = DBI->connect("dbi:SQLite:dbn

我一直成功地将Perl与SQLite结合使用,使用了
DBI
DBD::SQLite

最近,我在我的Ubuntu系统上安装了MySQL客户端和服务器,以及
DBD::MySQL
。MySQL工作得很好,但在安装Perl模块后,我在SQLite上运行了另一个项目,得到的消息是没有
DBD::SQLite

我使用CPAN重新安装了
DBD::SQLite
,现在我创建的数据库似乎不再是有效文件。如果我创建这样一个非常简单的数据库

my $dbh = DBI->connect("dbi:SQLite:dbname=test.db","","") or die $DBI::errstr;
my $sth = $dbh->prepare("CREATE TABLE test (id INTEGER, name char(100), PRIMARY KEY (id))");

$sth->execute(); 
$sth->finish;
$dbh->disconnect();
然后尝试使用SQLiteStudio打开此文件,我会收到消息

Error while opening test.db: file is encrypted or is not a database
在Linux控制台中出现以下消息

file is encrypted or is not a database
    while executing
"sqlite2 $name $_path"
    (object "::sqlite20" method "::Sqlite2::createDbObject" body line 2)
invoked from within
    "createDbObject ::database$dbNum"
显然,安装
DBD::mysql
时使用了
DBD:SQLite


有人知道为什么会发生这种情况以及如何修复它吗?

自2004年1.00版以来,DBD::SQLite随SQLite 3提供,从而创建和操作SQLite 3数据库。您正在使用创建和操作SQLite 2数据库的工具。它们不兼容

SQLite数据库文件使用的格式已完全修改。旧版本2.1格式和新版本3.0格式彼此不兼容。SQLite的2.8版不会读取3.0版数据库文件,SQLite的3.0版不会读取2.8版数据库文件

引用自SQLite 3问世时编写的SQLite


将DBD::SQLite降级到早于1.00的版本,或者使用
sqlite3
而不是
sqlite2

您的连接字符串非常简洁。文档显示了
my$dbh=DBI->connect(“DBI:SQLite:dbname=$dbfile”、“”、“”)@choroba:同意。根据我的经验,你可以通过用户的
undef
(因此你只需要提供DSN)而不受惩罚,但是一个简单的文件名有点极端,这与我编辑之前问题本身的拼写和格式不严格是一致的。对不起,实际上这是一个错误的复制和粘贴,该字符串与您发布的一样-这是因为我使用了一个变量,而我只是“草率地”将其替换为DB名称。我正试图编辑它,但是一个版主编辑了它,现在它抱怨他放的链接格式不正确。好的,我删除了链接并编辑了它,我的代码是正确的,不幸的是,这个错误与其他东西有关。很抱歉删除了你添加的链接。我使用的是最新的软件,我一直使用SQLite 3,据说SQLite studio也为SQLite 3做好了准备。今天晚些时候我将对此进行测试,但不幸的是,我不认为这是问题所在。在我决定安装DBD::mysql之前,一切都很正常。我不知道您原来的DBD::SQLite发生了什么,这真的不重要。没有什么能阻止您安装旧版本的DBD::SQLite.Re“我正在使用最新的软件”,我宁愿相信您从屏幕上复制的文字,上面说您使用了
sqlite2