当前位置: 首页 > article >正文

QT调用Sqlite数据库

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博客 可查阅。


http://www.kler.cn/a/454143.html

相关文章:

  • KVM虚拟机管理脚本
  • 【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用
  • Max AI prompt2:
  • 【网络云计算】2024第52周-每日【2024/12/23】小测-理论实操-解析
  • 项目亮点案例
  • 了解智能运维
  • Git和SVN有什么区别?
  • 微信V3支付报错 平台证书及平台证书序列号
  • iviewui Message/Notice 设置居顶高度方法
  • Linux中设置终端窗口大小
  • Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击
  • Java小公司面试
  • 关于studywolf_control动态运动原语
  • redis 缓存雪崩
  • 重装荣耀X14笔记本电脑踩坑记
  • Linux 线程池
  • RocketMQ的集群架构是怎样的?
  • 深度学习中的并行策略概述:4 Tensor Parallelism
  • 【ES6复习笔记】模板字符串(3)
  • 运行Zr.Admin项目(前端)