QSqlite更改

时间:2011-03-22 19:24:27

标签: 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定义为更低?还有其他一些我们做错了以防止向后兼容吗?

任何帮助都将不胜感激。

谢谢, Liron

1 个答案:

答案 0 :(得分:1)

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