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

3 篇文章 1 订阅

目录

准备工作

(1)创建ui界面

(2)导入头文件 

一、自动提交模式

二、手动提交模式

(1)构造函数中的代码

(2) “提交”按钮的槽函数

(3)“取消”按钮的槽函数

三、条件查找

(1)ui界面

 (2)“数据过滤”按钮的槽函数

(3)最终的运行效果


准备工作

(1)创建ui界面

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

(2)导入头文件 

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

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

一、自动提交模式

        在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,"成绩");

二、手动提交模式

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

(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);

(2) “提交”按钮的槽函数

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

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

(3)“取消”按钮的槽函数

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

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

三、条件查找

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

(1)ui界面

 (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();
}

(3)最终的运行效果

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

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐喽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值