我的团队以前使用 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 定义为更低?是否还有其他我们做错的事情来防止向后兼容?
任何帮助,将不胜感激。
谢谢,里龙