sqlite - Qt 和 sqlite 错误 26

标签 sqlite qt

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

select name from sqlite_master where type = 'table'; 

数据库已成功打开,但当我执行查询时,出现错误 26:文件已加密或不是数据库。当我使用 sqlite 命令行打开相同的数据库时,它工作正常。 Qt版本是4.8.1,sqlite文件以开头**这个文件包含一个SQLite 2.1数据库**操作系统是Linux,安装的sqlite版本是2.8.17。

知道这有什么问题吗?

谢谢, f.

编辑: 打开它:

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 的支持没有按预期工作。

最佳答案

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

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

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

关于sqlite - Qt 和 sqlite 错误 26,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036724/

相关文章:

c++ - 如何捕获 vector 中的 .erase 异常?

sql - SQL中的HAVING和WHERE之间的区别

android - 数据库结构-药物使用

android - SQLDroid 与 Android 内部 JDBC 驱动程序

python - Pandas write_frame 删除sqlite表

c++ - 面向初学者的 Qt 教程

sqlite - EF Core多对多数据

c++ - 如何使用 QtCreator 调试 DLL 项目?

c++ - 删除指向 QMainWindow 的链接时的 Qt 浏览器堆栈

c++ - 如何在世界地图图像上突出显示特定国家/地区