QT调用Sqlite数据库

发布于:2025-02-11 ⋅ 阅读:(24) ⋅ 点赞:(0)

QT设计UI界面,后台访问数据库,实现数据库数据的增删改查。

零售商店系统
数据库表:

分别是顾客表,订单详情表,订单表,商品表
表内字段详情如下:

 

 
在QT的Pro文件中添加sql,然后添加头文件
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

在代码中使用两个函数,初始化数据库函数,和创建订单函数

初始化数据库代码如下:


void mySql::initDataBase()
{
    //打开数据库
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("D://DB//server.db");//打开数据库
    if (db.open())
    {
        qDebug() << "Database opened successfully!";
    }
    else
    {
        qDebug() << "无法打开数据库:" << db.lastError().text();
    }
}

 添加订单代码函数如下
 

void mySql::addOrders(const QString& name,const QString& commodityName, int byQuality)
{

    if (!db.transaction()) {
        qDebug() << "Cannot start transaction:" << db.lastError();
        return;
    }

    QSqlQuery query;

    // 插入订单
    query.prepare("INSERT INTO Orders ('顾客ID', '订单日期', '总金额')\
                  SELECT Customers.ID, CURRENT_DATE, 0\
                  FROM Customers\
                  WHERE Customers.姓名 = :name;");

    query.bindValue(":name",name);

    if (!query.exec()) {
        qDebug() << "Insert into Orders failed:" << query.lastError();
        db.rollback();
        return;
    }


    // 插入订单详表
    query.prepare("INSERT INTO OrderItems ('订单ID', '商品ID', '商品数量', '单价')\
                  VALUES (\
                  LAST_INSERT_ROWID( ),\
                  ( SELECT Products.ID FROM Products WHERE Products.商品名 = :commodity ),\
                  10,\
                  ( SELECT Products.价格 FROM Products WHERE Products.商品名 = :commodity ));"
                  );

    query.bindValue(":commodity",commodityName);

    if (!query.exec()) {
        qDebug() << "Insert into OrderItems failed:" << query.lastError();
        db.rollback();
        return;
    }

    query.prepare("UPDATE orders\
                  SET 总金额 = (\
                  SELECT\
                  sum( 单价 * 商品数量 )\
                  FROM\
                  orderitems\
                  WHERE\
                  orderitems.订单id = LAST_INSERT_ROWID() )\
                  WHERE\
                  orders.id = LAST_INSERT_ROWID();"
                  );

    if (!query.exec()) {
        qDebug() << "Update Order TotalAmount failed:" << query.lastError();
        db.rollback();
        return;
    }

    // 更新产品库存量
    query.prepare("UPDATE Products\
                  SET 库存量 = 库存量 - :byQuantity\
                  WHERE\
                  Products.商品名 = :commodity;");

    query.bindValue(":byQuantity",byQuality);
    query.bindValue(":commodity",commodityName);

    if (!query.exec()) {
        qDebug() << "Update Product stock failed:" << query.lastError();
        db.rollback();
        return;
    }

    // 提交事务
    if (!db.commit()) {
        qDebug() << "Transaction commit failed:" << db.lastError();
    } else {
        qDebug() << "Purchase successful.";
    }
}

这里的SQL语句在🔗SQL语句练习-3-CSDN博客 可查阅。


网站公告

今日签到

点亮在社区的每一天
去签到