QT实现数据库的操作

案例

实现添加、展示、删除、排序(按成绩降序)操作

widget.h代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QSqlDatabase>                //数据库管理类
#include<QSqlQuery>                    //数据库查询类
#include<QSqlRecord>                   //记录类
#include <QMessageBox>                 //消息对话框
#include <QtDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_addBtn_clicked();

    void on_showBtn_clicked();

    void on_deleteBtn_clicked();

    void on_sortBtn_clicked();

private:
    Ui::Widget *ui;

    QSqlDatabase db;           //使用无参构造,实例化一个数据库管理类对象
};
#endif // WIDGET_H

widget.cpp代码

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //想要添加某个数据库
    if(!db.contains("stu.db"))
    {
        //如果当前对象中没有包含所需的数据库,则添加一个数据库
        db = QSqlDatabase::addDatabase("QSQLITE");  //添加一个sqlite3的数据库
        db.setDatabaseName("stu.db");   //设置数据库的名称
    }

    //4、打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"提示","数据库打开失败");
        return;
    }
    
    //程序执行至此,表示数据库创建成功并打开了
    //准备创建数据表
    //1、实例化一个sql语句的执行者
    QSqlQuery querry;
    
    //2、准备sql语句
    QString sql = "create table if not exists STU(id int, name char, sex char, score double);";
    
    //3、执行sql语句
    if(!querry.exec(sql))
    {

        QMessageBox::information(this,"提示","数据表创建失败");
        return ;
    }
    //程序执行至此,表示数据表也创建成功了
}

Widget::~Widget()
{
    delete ui;
}

//添加信息按钮对应的槽函数
void Widget::on_addBtn_clicked()
{
    //1、将ui界面上的信息获取来
    int ui_id = ui->numEdit->text().toUInt();   //获取学号
    QString ui_name = ui->nameEdit->text();     //姓名
    QString ui_sex = ui->sexEdit->text();       //性别
    double ui_score = ui->scoreEdit->text().toDouble();     //分数

    //2、判断信息中是否有空的
    if(ui_id == 0 || ui_name.isEmpty() || ui_sex.isEmpty() || ui_score == 0)
    {
        QMessageBox::information(this,"提示","请将信息填写完整");
        return ;
    }

    //3、准备sql语句
    QString sql = QString("insert into STU(id,name,sex,score) values(%1,'%2','%3',%4);")
                          .arg(ui_id).arg(ui_name).arg(ui_sex).arg(ui_score);
    //qDebug() <<sql;

    //4、实例化sql语句执行者
    QSqlQuery querry;
    
    //5、执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","添加信息失败");
        return ;
    }else
    {
        QMessageBox::information(this,"提示","添加成功");
    }
}

//展示信息按钮对应的槽函数
void Widget::on_showBtn_clicked()
{
    //1、实例化一个sql语句执行者
    QSqlQuery querry;

    //2、准备sql语句
    QString sql = "select * from STU;";

    //3、执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","查询失败");
        return ;
    }

    //程序执行至此,表示已经完成数据库的查询,并将结果存放到querry对象中,可以通过next函数进行遍历每个结果集
    //函数原型:bool next();
    //功能:读取查询结果集的下一条记录,如果记录不为空,就返回真,否则返回假
    int i=0;    //遍历结果集的行
    while(querry.next())
    {
        //获取当前记录
        QSqlRecord record = querry.record();

        //对当前记录进行操作,遍历当前记录的所有字段
        for(int j=0;j<record.count();j++)
        {
            //qDebug() << record.value(j).toString();

            //该循环中的value(j),表示的就是第i行j列的那个元素
            //record.value(j).toString();
            //ui->msgTable->setItem(i,j,new QTableWidgetItem(record.value(j).toString()));
            QTableWidgetItem *item = new QTableWidgetItem(record.value(j).toString());  //将数据库中的字段,封装成ui界面上的一条信息
            ui->msgTable->setItem(i,j,item);    //将信息进行展示
        }
        i++;    //表示行数增加
    }
}

//删除信息按钮对应的槽函数
void Widget::on_deleteBtn_clicked()
{
    //1、将ui界面上的信息获取来
    int ui_id = ui->numEdit->text().toUInt();
    QString ui_name = ui->nameEdit->text();
    QString ui_sex = ui->sexEdit->text();
    double ui_score = ui->scoreEdit->text().toDouble();

    //2、判断信息中是否有空的
    if(ui_id == 0 || ui_name.isEmpty() || ui_sex.isEmpty() || ui_score == 0)
    {
        QMessageBox::information(this,"提示","请将信息填写完整");
        return ;
    }

    //3、准备sql语句
    QString sql = QString("delete from STU WHERE id = %1 AND name = '%2' AND sex = '%3' AND score = %4;")
                          .arg(ui_id).arg(ui_name).arg(ui_sex).arg(ui_score);
    //qDebug() <<sql;

    //4、实例化sql语句执行者
    QSqlQuery querry;
    //5、执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","删除信息失败");
        return ;
    }else
    {
        QMessageBox::information(this,"提示","删除成功");
    }
}

//信息排序按钮对应的槽函数
void Widget::on_sortBtn_clicked()
{
    //1、实例化一个sql语句执行者
    QSqlQuery querry;

    //2、准备sql语句
    //QString sql = "select * from STU ORDER BY score ASC;";    //升序
    QString sql = "SELECT * FROM STU ORDER BY score DESC;";     //降序

    //3、执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","查询失败");
        return ;
    }

    //功能:读取查询结果集的下一条记录,如果记录不为空,就返回真,否则返回假
    int i=0;    //遍历结果集的行
    while(querry.next())
    {
        QSqlRecord record = querry.record();

        //对当前记录进行操作,遍历当前记录的所有字段
        for(int j=0;j<record.count();j++)
        {
            //qDebug() << record.value(j).toString();

            //该循环中的value(j),表示的就是第i行j列的那个元素
            //record.value(j).toString();
            //ui->msgTable->setItem(i,j,new QTableWidgetItem(record.value(j).toString()));
            QTableWidgetItem *item = new QTableWidgetItem(record.value(j).toString());
            ui->msgTable->setItem(i,j,item);
        }
        i++;    //表示行数增加
    }
}

运行效果

点击添加

任意一项为空,都会弹出提示“请将信息填写完整”

点击展示

点击删除

任意一项为空,都会弹出提示“请将信息填写完整”

点击排序

知识梳理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值