QT中的空sqlite数据库

时间:2013-04-14 19:15:49

标签: database sqlite qt

我在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项目之外打开这个数据库时,我有多个表,可以运行查询。

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

1 个答案:

答案 0 :(得分: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驱动程序
  • 检查数据库文件是否具有正确的名称。使用绝对路径而不是相对路径。