c++ - QSqlite 的变化

标签 c++ qt sqlite qtsql

我的团队之前使用的是 Qt 4.3,正在尝试更新到最新版本 (4.7.2)。

之前我们使用的是 qsqlite 插件,但是这个功能已经被移到 Qt 的主要 QSql 组件中。

现在我们已经升级了,我们无法读取我们的旧数据库。这似乎是因为当我们创建表时,我们是这样创建它们的:

CREATE TABLE [Characters] ([Id] INTEGER NOT NULL ON CONFLICT ROLLBACK PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT UNIQUE ON CONFLICT ROLLBACK, [Project_Id] INTEGER NOT NULL ON CONFLICT ROLLBACK REFERENCES [Projects](Id) ON DELETE RESTRICT ON UPDATE RESTRICT ON INSERT RESTRICT, [CharacterName] VARCHAR(128) NOT NULL ON CONFLICT ROLLBACK UNIQUE ON CONFLICT ROLLBACK);

但是 ON INSERT RESTRICT 不再有效。

我能够删除该代码并创建新表,但如果我对现有数据库之一执行 myQSqlDatabase.tables(),它会返回零。

通过深入研究 Qt 代码,我注意到 prepare 方法具有:

#if (SQLITE_VERSION_NUMBER >= 3003011)
    int res = sqlite3_prepare16_v2(d->access, query.constData(), (query.size() + 1) * sizeof(QChar), &d->stmt, 0);
#else
    int res = sqlite3_prepare16(d->access, query.constData(), (query.size() + 1) * sizeof(QChar), &d->stmt, 0);
#endif

我们正在输入第一个 if (sqlite3_prepare16_v2)。

我们是否应该将 SQLITE_VERSION_NUMBER 定义得更低?为了防止向后兼容,我们是否还做错了什么?

如有任何帮助,我们将不胜感激。

谢谢, 锂铁

最佳答案

从作者网站下载的 sqlite 带有一个命令行程序。 如果您的数据库不兼容,您可以轻松地使用它将数据导出到文本文件并将其加载到新数据库中。

关于c++ - QSqlite 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396674/

相关文章:

c++ - 两个应用程序可以通过 UDP 数据包进行通信吗?

c++ - Visual Studio 忽略 "Additional Library Directories"字段

sqlite - 在 docker 容器中运行 go binary 时找不到 Spatialite 扩展

qt - QDatastream operator>> 用于 QList<Class*>

Android SQLite 选择 IS NOT NULL

android - SQLite获取查询数据问题

c++ - 在 C++ 中将类模板声明为类模板的友元

java - 在 'for' 循环中递增 1 时格式化背后的技术原因?

windows - 如何为非 Qt 应用程序创建 Qt 共享库

c++ - QQuickItem 派生类的高 DPI 缩放