9.4 数据库 TCP

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")){
        //不存在数据库,添加一个数据库
        //static QSqlDatabase addDatabase(const QString& type);
        //参数:数据库的版本
        //返回值:添加的数据库
        db = QSqlDatabase::addDatabase("QSQLITE");  //表明使用的是sqlite3版本的数据库

        //给数据库命名
        db.setDatabaseName("Stu.db");
    }

    //打开数据库
    if(!db.open()){  //如果没有设置
        QMessageBox::information(this, "信息", "数据库打开失败");
        return ;
    }

    //此时说明数据库已经创建出来,并打开了,就可以创建数据表了
    //创建数据表需要sql语句,需要使用QSQLQuerry类对象完成
    //准备sql语句
    QString sql = "create table if not exists mytable("
                    "id integer primary key autoincrement,"     //id主键,允许自增
                    "numb integer,"                             //学号,整形
                    "name varchar(10),"                         //姓名,字符串
                    "sex varchar(4),"                          //性别,字符串
                    "score integer)";                           //分数
    //定义语句执行者
    QSqlQuery querry;
    //使用querry执行sql语句
    if(!querry.exec(sql)){
        QMessageBox::information(this, "信息", "创建表格失败");
    }
    else{
        QMessageBox::information(this, "信息", "创建表格成功");
    }
}

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

//录入按钮对应的槽函数
void Widget::on_inputbtn_clicked()
{
    //获取ui界面要存入数据库的数据
    int numb_ui = ui->numbedit->text().toInt();
    QString name_ui = ui->nameedit->text();
    int score_ui = ui->scoreedit->text().toInt();
    QString sex_ui = ui->sexedit->text();

    if(numb_ui==0 || name_ui.isNull() || score_ui==0 || sex_ui.isNull()){
        QMessageBox::information(this, "信息", "请将信息填写完整");
        return ;
    }
    //准备sql语句
    QString sql = QString("insert into mytable(numb, name, sex, score)"
                  "values(%1, '%2', '%3', %4)").arg(numb_ui).arg(name_ui).arg(sex_ui).arg(score_ui);
    //定义语句执行官
    qDebug() << sql;
    QSqlQuery querry;
    if(!querry.exec(sql)){
        QMessageBox::information(this, "信息", "插入数据失败");
        return ;
    }
    QMessageBox::information(this, "信息", "数据录入成功");
}

//展示按钮对应的槽函数
void Widget::on_showbtn_clicked()
{
    ui->tableWidget->clear();
    //准备sql语句
    QString sql = "select * from mytable";
    //准备语句执行者
    QSqlQuery querry;
    if(!querry.exec(sql)){
        QMessageBox::information(this, "信息", "查询失败");
        return ;
    }

    //此时,将查询到的结果,全部放到querry对象中
    //可以通过next函数不断遍历查询结果
    int i = 0;
    while(querry.next()){
        //遍历的就是任意一组记录:querry.record
        //querry.record().value(1);

        //将数据库中的表格展示到ui界面
                     //当前记录对应数据项的个数
        for(int j=0;j<querry.record().count()-1;j++){
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
        }
        i++;//进入下一行
    }
}

//查找
void Widget::on_searchbtn_clicked()
{
    ui->tableWidget->clear();
    //获取ui界面要存入数据库的数据
    int numb_ui = ui->numbedit->text().toInt();
    QString name_ui = ui->nameedit->text();
    int score_ui = ui->scoreedit->text().toInt();
    QString sex_ui = ui->sexedit->text();
    //准备sql语句
    QString sql = QString("select * from mytable where "
                          "numb=%1 and name='%2' and score=%3 and sex='%4'").arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);
    qDebug() << sql;
    QSqlQuery querry;
    if(!querry.exec(sql)){
        QMessageBox::information(this, "信息", "条件查询失败");
        return ;
    }
    int i=0;
    while(querry.next()){
        for(int j=0;j<querry.record().count()-1;j++){
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
        }
        i++;
    }
}

//删除
void Widget::on_deletebtn_clicked()
{
    //获取ui界面要存入数据库的数据
    int numb_ui = ui->numbedit->text().toInt();
    QString name_ui = ui->nameedit->text();
    int score_ui = ui->scoreedit->text().toInt();
    QString sex_ui = ui->sexedit->text();
    //准备sql语句
    QString sql = QString("delete from mytable where "
                          "numb=%1 and name='%2' and score=%3 and sex='%4'").arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);
    QSqlQuery querry;
    if(!querry.exec(sql)){
        QMessageBox::information(this, "信息", "删除失败");
        return ;
    }
    QMessageBox::information(this, "信息", "删除成功");
}

展示

查找

删除

相关推荐
古月-一个C++方向的小白6 小时前
C++11之lambda表达式与包装器
开发语言·c++
tanyongxi668 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
斯是 陋室10 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
tju新生代魔迷11 小时前
C++:list
开发语言·c++
HHRL-yx11 小时前
C++网络编程 5.TCP套接字(socket)通信进阶-基于多线程的TCP多客户端通信
网络·c++·tcp/ip
tomato0911 小时前
河南萌新联赛2025第(一)场:河南工业大学(补题)
c++·算法
每一天都要努力^14 小时前
C++拷贝构造
开发语言·c++
NoirSeeker15 小时前
在windows平台上基于OpenHarmony sdk编译三方库并暴露给ArkTS使用(详细)
c++·windows·arkts·鸿蒙·交叉编译
落羽的落羽15 小时前
【C++】(万字)一文看懂“类与对象”
c++
闻缺陷则喜何志丹16 小时前
【带权的并集查找】 P9235 [蓝桥杯 2023 省 A] 网络稳定性|省选-
数据结构·c++·蓝桥杯·洛谷·并集查找