【发布时间】:2016-07-08 10:06:12
【问题描述】:
我对 Qt 和 sqlite 有疑问。直到最近,我在创建表时都没有遇到任何问题,但是现在,每当我尝试创建表(使用完全相同的函数)时,我都会收到一条错误消息:
QSqlError("1", "Unable to fetch row", "table selections already exists")
我的查询字符串如下:
CREATE TABLE external_files (path VARCHAR (255) NOT NULL, used INTEGER (12) NOT NULL);
这也和以前一样。
奇怪的是,所有的表都没有问题地创建,但我仍然收到错误消息。
如果您对为什么会发生这种情况有任何想法,我将不胜感激。 :)
更新:最小、完整、可验证的示例:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QFile>
#include <QTextStream>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "CONN");
db.setDatabaseName("test.db");
if(!db.open()){
qDebug() << "Connection failed!";
}
QFile tableListFile(":/resources/sql/tables.sql");
if(tableListFile.open(QIODevice::ReadOnly))
{
QTextStream stream(&tableListFile);
while(!stream.atEnd())
{
QString queryString = stream.readLine();
qDebug() << "Query string: " << queryString;
QSqlQuery query(queryString, db);
if(!query.exec()){
qDebug() << "Query error: " << query.lastError();
}
}
}
db.close();
return a.exec();
}
提前致谢。
【问题讨论】:
-
数据库告诉你“表
selections已经存在”,然后你想知道为什么表存在? -
在我运行之前数据库是空的。它会创建表格选择,但我还是会收到此错误消息。
-
显然,在 CREATE TABLE 语句之前数据库非为空。
-
你绝对肯定
CreateProject不可能两次调用CreateDatabase吗?您是否完全确定要在程序退出时(或在下次调用CreateProject之前)删除 DB 文件?您是否检查过其他表创建调用的复制/粘贴错误?在没有上下文的情况下,这有点乱七八糟... -
这没有什么神奇之处。你做错了什么。将所有相关代码(而不是其他代码!)放入单个
main.cpp文件中,将 SQL 程序作为字符串包含在内,最小化,然后看看你得到了什么。到目前为止,您显示的代码是可以的,除了我们必须猜测所有未显示的代码可能在做什么。