1

我尝试使用 Qt 打开一个 Sqlite 数据库来执行以下查询:

select name from sqlite_master where type = 'table'; 

并且数据库成功打开,但是当我执行查询时,出现错误 26: file is encrypted or is not a databasesqlite当我用命令行打开同一个数据库时,它工作正常。Qt版本为4.8.1,sqlite文件以** This file contains an SQLite 2.1 database **操作系统为Linux启动,安装的sqlite版本为2.8.17。

知道这有什么问题吗?

谢谢,f。

Edit:像这样打开它:

QSqlDatabase dbo = QSqlDatabase::addDatabase("QSQLITE", "connName");
dbo.setDatabaseName("/home/myself/test.sqlite");
dbo.open();
if(!dbo.isOpen())
{
    qDebug() << dbo.lastError();
    return;
}
QSqlQuery query(dbo);
bool ok = query.exec("select name from sqlite_master where type = 'table';");
if(!ok)
{ 
  //get error code, etc...
}

这是不行的:(

Edit2:我尝试过使用不同的 sqlite 文件,该文件以:开头,SQLite format 3并且效果很好。似乎对 Sqlite 2 的开箱即用 Qt 支持没有按预期工作。

4

1 回答 1

2

SQLite 3.x(包括在 Qt 中)无法打开 SQLite 2 文件。

SQLite 2 已经过时多年了。你应该升级你的数据库:

sqlite2 old-db.sqlite .dump > backupfile
sqlite3 new-db.sqlite < backupfile
于 2013-04-17T12:23:09.700 回答