3

我在 QT 中访问我的 sqlite 数据库时遇到问题。我已将我的数据库存储在我的项目文件夹中并执行了以下操作:

.pro file

RESOURCES += \

sqfiles.SOURCES = db.sqlite
sqfiles.path = .

DEPLOYMENT += sqfiles

我可以打开我的数据库并声明它有效但没有表,因此我无法执行任何搜索命令并在运行此代码后收到以下错误:

QSqlQuery query("SELECT * FROM shifts", db);
if(!query.exec())
{
    qDebug() << query.lastError().text();
    qDebug() << "ERROR" << endl;
    return;
}
while(query.next())
{
    QString name = query.value(1).toString();
    qDebug() << name << endl;
}

消息:“无查询无法获取行”

当我在我的 QT 项目之外打开这个数据库时,我有多个表并且可以运行查询。

关于出了什么问题的任何建议或想法?为什么它认为我的数据库是空的?

4

1 回答 1

2

这是我创建表的查询(使用 SQLITE 数据库浏览器程序)。

CREATE TABLE shifts (ID INTEGER PRIMARY KEY, NUMBER NUMERIC, TEXT TEXT);
INSERT INTO shifts VALUES(1,123,'ABC');
INSERT INTO shifts VALUES(2,456,'DEF');

这是我的 Qt 代码。

#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("database.db");
    db.open();
    QSqlQuery query;
    query.exec("SELECT * from shifts");
    while (query.next())
    {
        qDebug() << "NUMBER" << query.value(0).toString()
                    << "TEXT" << query.value(1).toString();
    }
    return a.exec();
}

输出

NUMBER "1" TEXT "123" 
NUMBER "2" TEXT "456" 

我没有在项目文件中添加 SQLite 信息。相反,我使用QSqlDatabase并添加了QT += sql. 哦,是的,确保你有 SQLITE 驱动程序。像这样测试。

qDebug() << QSqlDatabase::drivers();

这是我的输出。

("QSQLITE", "QMYSQL3", "QMYSQL") 

去做

  • 检查您是否使用 Qt 安装了 SQLite 驱动程序
  • 检查数据库文件的名称是否正确。使用绝对路径而不是相对路径。
于 2013-04-15T12:36:10.133 回答