Qt和sqlite错误26

时间:2013-04-16 12:10:49

标签: sqlite qt

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

select name from sqlite_master where type = 'table'; 

数据库成功打开,但是当我执行查询时,我收到错误26:file is encrypted or is not a database。当我使用sqlite命令行打开相同的数据库时,它工作正常。 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开头,它运行良好。似乎开箱即用Qt对Sqlite 2的支持无法按预期工作。

1 个答案:

答案 0 :(得分:2)

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

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

sqlite2 old-db.sqlite .dump > backupfile
sqlite3 new-db.sqlite < backupfile