21、Qt中mysql可视化操作

1、在操作数据库之前,需要先布局好界面,使用核心控件QTableView、按钮、行编辑进行布局,对数据库操作;实现增加、删除、确认、取消、搜索操作;

  

2、连接数据库、打开数据库、创建表格、表格中插入数据

    // 连接数据库
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("mydata");
    // 打开数据库
    if(!db.open())
    {
        return;
    }
    // 批量插入数据
    // oracle风格
    // 站位符 :+自定义名字
    QSqlQuery query;
    query.prepare("insert into student(name,age,score) values(:name,:age,:score)");
    // 字段设置内容
    QVariantList nameList;
    nameList<< "小白"<< "乐乐"<< "欢欢"<< "小夏";
    QVariantList ageList;
    ageList << 43<< 45<< 44 << 23;
    QVariantList scoreList;
    scoreList << 56<< 75<< 84 << 70;
    // 字段绑定内容 与绑定顺序无关
    query.bindValue(":name", nameList);
    query.bindValue(":score",scoreList );
    query.bindValue(":age",ageList);
    // 执行预处理命令
    query.execBatch();

3、将数据库中的数据与TableView关联起来

    // 设置模型
    model = new QSqlTableModel(this);
    model->setTable("student");   // mydata数据库中的student表格
    // 把model放在view上面
    ui->tableView->setModel(model);
    // 显示model里面的数据
    model->select();
    // 设置view显示的标题
    model->setHeaderData(0,Qt::Horizontal,"学号");
    // 设置model的编辑模式,手动提交修改
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    // 不允许修改view中的数据库不允许修改
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

4、按钮选项槽函数实现,这里我们增加数据后需要按下确认按钮完成增加数据功能,如果按下取消后,数据增加失败;删除数据也同样操作;

  1、增加数据槽函数实现:

void Widget::on_btnAdd_clicked()
{
    // 添加空记录
    QSqlRecord record = model->record(); // 获取空记录
    // 获取行号
    int row = model->rowCount();  // 获取总行数 可选择多行数据
    model->insertRecord(row, record);
}

  2、确定按钮选项:

void Widget::on_btnSure_clicked()
{
    model->submitAll();   // 提交所有动作
}

  3、取消动作槽函数

void Widget::on_btnCancel_clicked()
{
    model->revertAll();  // 取消所有动作
    model->submitAll();  // 提交所有动作
}

  4、删除动作槽函数

void Widget::on_btnDel_clicked()
{
    // 获取选中的模型
    QItemSelectionModel *sModel = ui->tableView->selectionModel();
    // 取出来模型中的索引
    QModelIndexList list = sModel->selectedRows();
    // 删除所有选中的行
    for(int i=0;i<list.size();i++)
    {
        model->removeRow(list.at(i).row());  // 删除一行数据
    }
}

  5、查找动作槽函数

void Widget::on_btnFind_clicked()
{
    QString name = ui->lineEdit->text();
    QString str = QString("name = '%1'").arg(name);

    model->setFilter(str);  // 设置过滤条件
    model->select();   // 选中过滤后的
}

5、需要用到的几个类

#include <QSqlDatabase> // 添加数据库
#include <QSqlTableModel> // 数据库显示模型
#include <QSqlQuery>   // 操作数据库接口
#include <QSqlRecord>  // 插入数据记录的类
QSqlDatabase db;
QSqlTableModel *model;    // 用于显示模块
posted @ 2020-12-10 14:39  笑不出花的旦旦  阅读(745)  评论(0)    收藏  举报