sqlite Qt中的嵌入式数据库

ukqbszuj  于 2023-04-30  发布在  SQLite
关注(0)|答案(3)|浏览(173)

我有一个SQLite数据库用于我的Qt应用程序。我假设将数据库作为资源添加是合乎逻辑的。
我无法使用嵌入式资源编译我的应用。

连接。h

#ifndef CONNECTION_H
#define CONNECTION_H

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":/data/ShippingData.db3");
    if (!db.open())
    {
        QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text());
        return false;
    }
    return true;
}

#endif // CONNECTION_H

assets.qrc

<RCC>
    <qresource prefix="/data">
        <file>ShippingData.db3</file>
    </qresource>
</RCC>

我的sqlite数据库现在是这样的

app.pro
  file.h
  file.cpp
  data/ShippingData.db3

构建问题(来自Qt Creator)

No rule to make target `../TimePlotter/Shipping.db3', needed by `debug/qrc_assets.cpp'. Stop.

我试着改变我的资源布局,因为它从消息编译器不进入数据库所在的data/文件夹。我在这个资源文件中遇到了完全相同的构建问题

<RCC>
    <qresource>
        <file>data/ShippingData.db3</file>
    </qresource>
</RCC>

TimePlotter.pro

#-------------------------------------------------
#
# Project created by QtCreator 2010-11-21T03:18:17
#
#-------------------------------------------------

QT       += core gui

TARGET = TimePlotter
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    time.cpp \
    clients.cpp \
    printTime.cpp

HEADERS  += mainwindow.h \
    time.h \
    clients.h \
    printTime.h \
    connection.h

FORMS    += mainwindow.ui \
    time.ui \
    clients.ui \
    printTime.ui

RESOURCES += \
    assets.qrc
u91tlkcl

u91tlkcl1#

即使解决了编译问题,在qrc文件中嵌入SQLite数据库也不会起作用。
最好的解决方案是IMHO在qrc文件中包含一个数据库转储,创建一个内存SQLite db并从资源中的SQL语句重建数据库。

t2a7ltrp

t2a7ltrp2#

我至少知道如何在Mac OSX上做到这一点,其中QMAKE_BUNDLE_DATA参数工作。对于Windows,请查看this answer
1.在项目目录中创建一个名为“data”的目录。
1.把你的数据库文件放进去。
1.在.pro文件中,添加以下部分:
mac { Resources.files = data Resources.path = Contents/MacOS QMAKE_BUNDLE_DATA += Resources }
1.现在,当您重新构建应用程序时,它将位于Contents/MacOS/data文件夹中。因此,如果您的数据库名为custom,则可以执行类似的操作。db:

db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db"));
cyvaqqii

cyvaqqii3#

似乎您删除或重命名您的数据库文件Shipping。db3并添加ShippingData。要解决此构建问题,您应该删除构建文件夹并重新生成项目。这将解决您的构建问题。
您可以在这里阅读数据库部署说明:http://discussion.forum.nokia.com/forum/showthread.php?202894-Add-existing-Sqlite-database-to-Qt-project

相关问题