使用Qt操作MySQL数据库中的表格

1、准备工作

1.1、创建ui界面

在ui界面导入一个Table View。这个控件可以显示表格,在代码中我们通过setHeaderData()函数可以自定义每列的名称。

 

1.2、导入头文件

需要用到以下头文件,QSqlDatabase用于连接数据库,QMessageBox用于弹出对话框,QSqlError用于显示数据库的错误信息,QSqlQuery和QSqlTableModel用于操作数据库。

#include <QWidget>
#include <QSqlDatabase>
#include <QMessageBox> 
#include <QSqlError>  
#include <QString>
#include <QSqlQuery>
#include <QSqlTableModel>

2、自动提交模式

在Qt窗口显示的表格中改动数据,然后点击回车,数据库中的表格中的数据就自动更新了。注意,在这里必须是敲击回车才会进行数据库的更新,如果直接用鼠标切换到其他的地方是不会更新数据库的。

	//连接数据库
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");    
    db.setHostName("127.0.0.1"); 
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("aaa2");
    if(db.open()==false){
        QMessageBox::warning(this,"waring",db.lastError().text());
    }
    //实例化model
    model = new QSqlTableModel(this);
    //将模型设置到视图
    ui->tableView->setModel(model);
    //给model设置数据表,前提条件是数据库已经打开了
    model->setTable("student");
    //查询表
    model->select();
    //设置表头
    model->setHeaderData(0,Qt::Horizontal,"编号");
    model->setHeaderData(1,Qt::Horizontal,"姓名");
    model->setHeaderData(2,Qt::Horizontal,"年龄");
    model->setHeaderData(3,Qt::Horizontal,"成绩");

3、手动提交模式

除了自动提交模式外,我们还可以引入按钮来实现手动提交模式。这样我们可以一次性修改多个值,然后再一起提交。在ui界面引入“提交”和“取消”两个按钮。

 

3.1、构造函数中的代码

	//连接数据库
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");    
    db.setHostName("127.0.0.1"); 
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("aaa2");
    if(db.open()==false){
        QMessageBox::warning(this,"waring",db.lastError().text());
    }
    //实例化model
    model = new QSqlTableModel(this);
    //将模型设置到视图
    ui->tableView->setModel(model);
    //给model设置数据表,前提条件是数据库已经打开了
    model->setTable("student");
    //查询表
    model->select();
    //设置表头
    model->setHeaderData(0,Qt::Horizontal,"编号");
    model->setHeaderData(1,Qt::Horizontal,"姓名");
    model->setHeaderData(2,Qt::Horizontal,"年龄");
    model->setHeaderData(3,Qt::Horizontal,"成绩");
    //设置提交模式 手动提交
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

3.2、“提交”按钮的槽函数

submitAll()函数的意思是提交全部操作到数据库,也就是更新数据库了。

void DataModeForm::on_pushButton_clicked()
{
    //点击提交 改动表格数据 数据库跟着一起改变
    model->submitAll();     //提交 更新数据库
}

3.3、“取消”按钮的槽函数

扫描二维码关注公众号,回复: 14603639 查看本文章

revertAll()函数的意思是取消前面的全部操作,当时点击“取消”按钮时会发现你之前做的修改全消失了。

void DataModeForm::on_pushButton_2_clicked()
{
    //点击取消,改动的表格数据作废,数据库不改变
    model->revertAll();     //撤销操作
    model->submitAll();     //提交 更新数据库
}

4、条件查找

在查表时,我们通常需要用到条件查找,这就需要用到过滤函数了。首先需要先在ui界面增加一个linEdit作为输入文本框,然后再添加一个按钮。

4.1、ui界面

4.2、“数据过滤”按钮的槽函数

首先用name接收用户输入的查找条件,然后将其设置到sql语句中。注意,因为“%1”代表的是字符串型的数据,所以必须加单引号。如果“%1”代表的是整型的数据就不用单引号了。

void DataModeForm::on_pushButton_3_clicked()
{
    //按姓名查找
    QString name=ui->lineEdit->text();
    QString sql= QString("name='%1'").arg(name);
    //设置过滤条件
    model->setFilter(sql);
    //重新查询
    model->select();
}

4.3、最终的运行效果

如果想要查找name=kaw的学生,在输入框中输入kaw,然后点击“数据过滤”按钮。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

猜你喜欢

转载自blog.csdn.net/m0_73443478/article/details/129952520