C++ Qt中的嵌入式数据库

C++ Qt中的嵌入式数据库,c++,qt,sqlite,embedded-resource,C++,Qt,Sqlite,Embedded Resource,我有一个用于Qt应用程序的SQLite数据库。我假设将数据库添加为资源是合乎逻辑的 我无法使用嵌入式资源编译我的应用程序 连接.h #ifndef CONNECTION_H #define CONNECTION_H #include <QMessageBox> #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> static bool createConnectio

我有一个用于Qt应用程序的SQLite数据库。我假设将数据库添加为资源是合乎逻辑的

我无法使用嵌入式资源编译我的应用程序

连接.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
生成问题(来自Qt创建者)

我试图更改我的资源布局,因为它来自消息“编译器未进入数据库所在的数据/文件夹”。我得到了与此资源文件完全相同的构建问题

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

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

似乎删除或重命名了数据库文件Shipping.db3,并添加了ShippingData.db3。若要解决此生成问题,应删除生成文件夹并重新生成项目。这将解决您的构建问题


您可以在此处阅读数据库部署说明:

我至少知道如何在Mac OSX上执行此操作,其中QMAKE_BUNDLE_数据参数起作用。对于Windows,请查看

  • 在项目目录中创建一个名为“data”的目录
  • 把你的数据库文件放在那里
  • 在.pro文件中,添加以下部分:

    mac{
    Resources.files=数据
    Resources.path=Contents/MacOS
    QMAKE_BUNDLE_DATA+=资源
    }

  • 现在,当您重建应用程序时,它将位于Contents/MacOS/data文件夹中。因此,如果数据库名为custom.db,则可以执行以下操作:

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

  • 你能把你的.pro文件也贴出来吗?这将有助于理解。谢谢。另外,您的assets.qrc文件在项目树中的位置?我添加了.pro文件,谢谢您的帮助发布.pro内容是否回答了您的第二个问题?在实际目录assets.qrc中,它位于项目文件夹的根目录下。(即与.qrc位于同一文件夹中的.cpp、.h和.ui文件)
    No rule to make target `../TimePlotter/Shipping.db3', needed by `debug/qrc_assets.cpp'. Stop.
    
    <RCC>
        <qresource>
            <file>data/ShippingData.db3</file>
        </qresource>
    </RCC>
    
    #-------------------------------------------------
    #
    # 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
    
    db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db"));