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