我总是使用DBI
和DBD::SQLite
成功地将Perl与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
混淆。
有没有人对于为什么会发生这种情况以及如何解决这个问题有任何想法?
答案 0 :(得分:1)
自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 documentation,当SQLite 3出现时。
将DBD :: SQLite降级为早于1.00的版本或使用sqlite3
代替sqlite2
。