【QSqlTableModel】QT数据库的数据模型---QSqlTableModel

一、定义

数据库的数据模型是将SQL语句对数据库的访问完全对象化,将SQL语句的执行封装成对象及其成员函数的实现,同时也对象化了QT的表格界面,实现了数据库访问的高耦合性,屏蔽了数据库访问的内部细节,将数据库的访问简化成调用对象的接口(成员函数)。
在这里插入图片描述

二、QSqlTableModle类

成员函数:
1.绑定表格(数据库的表)

[virtual] void QSqlTableModel::setTable(const QString &tableName);
//传入表格名

2.插入
插入一条记录 ------- insertRecord

bool QSqlTableModel::insertRecord(int row, const QSqlRecord &record);
//先构建一条QSqlRecord,再插入指定行
插入一行 ----------- insertRow
bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex());
//传入第几行

3.提交模型数据到数据库 ----------- submit/submitAll

[override virtual slot] bool QSqlTableModel::submit();
[slot] bool QSqlTableModel::submitAll();

4.查询 ------------ select

[virtual slot] bool QSqlTableModel::select();
//每次查询前应该重新绑定表格,如果需要显示就绑定模型和表格界面
//查找也可以设置过滤器和排序方法
[virtual] void QSqlTableModel::setFilter(const QString &filter);
//传入的字符串格式类似于 "字段名=字段值"
[virtual] void QSqlTableModel::setSort(int column, Qt::SortOrder order);
//传入按哪一列,用什么方式排序
    Qt::AscendingOrder ----- 升序
    Qt::DescendingOrder ---- 降序

5.从模型中删除行 ---------- removeRow/removeRows

[override virtual] bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
//传入哪一行开始一共多少行
[override virtual] int QSqlTableModel::rowCount(const QModelIndex &parent = QModelIndex()) const;
//返回当前模型中的行数
bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex());
//删除指定行

6.修改 = 查询+插入
(1) select+record(…)+记录的setValue+setRecord

//如何获取QSqlRecord
QSqlRecord QSqlTableModel::record() const;//获取一条空记录
QSqlRecord QSqlTableModel::record(int row) const;//获取指定行的记录
//QSqlRecord的修改字段成员函数
    void QSqlRecord::setValue(int index, const QVariant &val);//通过编号修改
    void QSqlRecord::setValue(const QString &name, const QVariant &val);//通过字段名修改
//修改记录
bool QSqlTableModel::setRecord(int row, const QSqlRecord &values);//修改指定行的记录

(2) 直接修改模型中的数据 ------- setData

[override virtual] bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
//传入要修改的位置编号和内容
[override virtual] QModelIndex QAbstractTableModel::index(int row, int column, const QModelIndex &parent = ...) const;
//通过行和列获取index编号

7.撤销修改 ------ revert/revertAll

[override virtual slot] void QSqlTableModel::revert();
[slot] void QSqlTableModel::revertAll();    

测试代码:

#include "smartsqlstu.h"
#include "ui_smartsqlstu.h"
#include <QMessageBox>


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

    //1.添加数据库驱动
    db = QSqlDatabase::addDatabase("QSQLITE");
    //2.指定数据库文件路径
    db.setDatabaseName("stu.db");
    //3.打开数据库
    if(!db.open()){
        QMessageBox::warning(this,"提示","打开数据库失败!");
    }

    //初始化模型
    model = new QSqlTableModel(this);
}

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

//建表
void SmartSQLStu::on_pushButton_createtab_clicked()
{
    QString sql = QString("create table if not exists %1(id int unique,name nvarchar,age int)")
                  .arg(ui->lineEdit_tabname->text());

    //QSqlQuery执行sql
    QSqlQuery query;
    if(!query.exec(sql)){//失败
        QMessageBox::warning(this,"提示","建表失败!");
        return;
    }

    model->setTable(ui->lineEdit_tabname->text());
    //设置提交后生效
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    //显示
    model->select();
    ui->tableView->setModel(model);

    //禁止创建,使能操作
    ui->lineEdit_tabname->setEnabled(false);
    ui->pushButton_createtab->setEnabled(false);
    ui->pushButton_add->setEnabled(true);
    ui->pushButton_save->setEnabled(true);
    ui->pushButton_delete->setEnabled(true);
    ui->pushButton_revert->setEnabled(true);
    ui->pushButton_select->setEnabled(true);
}

//添加
void SmartSQLStu::on_pushButton_add_clicked()
{
    //获取当前的行数
    int row = model->rowCount();
    //在末尾插入一行
    model->insertRow(row);
    int id = 100;
    model->setData(model->index(row,0),id);

    //提交
    model->submitAll();
}

//保存
void SmartSQLStu::on_pushButton_save_clicked()
{
    model->submitAll();
}

//撤销
void SmartSQLStu::on_pushButton_revert_clicked()
{
    model->revertAll();
}

//删除选中行
void SmartSQLStu::on_pushButton_delete_clicked()
{
    //从表格中获取要删除的行
    int delrow = ui->tableView->currentIndex().row();
    //删除
    model->removeRow(delrow);

    //再次询问用户是否真的删除
    if(QMessageBox::Yes==QMessageBox::warning(this,"删除","确定要删除吗?",QMessageBox::Yes|QMessageBox::No)){
        model->submitAll();
    }
    else{
        model->revertAll();
    }
}

// 查询
void SmartSQLStu::on_pushButton_select_clicked()
{
    model->setTable(ui->lineEdit_tabname->text());
    model->select();
}

测试结果
在这里插入图片描述

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 【QT数据库实战之qsqltablemodel模型.rar是一份实用的资料,它详细介绍了如何利用QT框架中的QSqlTableModel模型来操作数据库,并且提供了完整的代码示例和演示视频,为学习者提供了更加直观、全面的学习体验。 其中,资料着重介绍了QSqlTableModel模型的使用方法和常见操作,包括如何建立数据源、如何进行数据查询、修改和删除等。此外,它还提供了丰富的实例程序,通过这些程序,学习者可以深入了解不同的应用场景下如何使用QSqlTableModel模型来完成数据处理的操作。 在实际学习中,这份资料可以作为一个很好的参考教材。它清晰地展示了QT框架的优势和便捷性,帮助学习者快速了解QSqlTableModel模型的使用方法和注意事项,提高了学习效率。 总的来说,【QT数据库实战之qsqltablemodel模型.rar是一份很有价值的学习资料,对于想深入学习QT数据库编程的开发者来说,是一份不可多得的资料。 ### 回答2: 【qt数据库实战之qsqltablemodel模型.rar 是一个实战教程,主要讲解 qsqltablemodel 模型在 Qt 数据库编程中的应用。该教程适合于想要学习 Qt 数据库编程的开发者,熟悉 C++ 语言以及 Qt 编程基础的开发者更容易理解和掌握其中的内容。 该教程主要分为三个部分:Qt 数据库连接的建立、qsqltablemodel 模型的使用以及 qsqlquerymodel 模型的使用。通过阅读该教程,开发者可以学习到如何运用 Qt 自带的数据库模块进行数据库编程,如何使用 qsqltablemodel 模型操作数据库,并且能够理解 qsqlquerymodel 模型的用处和优劣势。 在该教程中,开发者将会联系到一个实际的案例,即利用 qsqltablemodel 模型开发一个图书管理系统。通过对该案例的开发实践,开发者可以更好地理解 qsqltablemodel 模型的实际使用,掌握 qsqltablemodel 模型在数据库编程中的应用。 总之,【qt数据库实战之qsqltablemodel模型.rar 是一份非常实用的 Qt 数据库编程教程,可以帮助开发者对 Qt 数据库编程有更深入的了解和掌握。 ### 回答3: qt 数据库实战之 qsqltablemodel 模型.rar 是一个用于学习 qt 数据库编程的资源文件。qsqltablemodelqt 框架中的一个模型类,可以用于对数据库进行增删改查操作,并在 qt 的相关控件中显示查询结果。 该资源文件包含了一个完整的 qt 项目,其中包含了对 qsqltablemodel 类的使用示例,可以通过该示例快速入门 qt 数据库编程,掌握 qsqltablemodel 类的使用方法。该示例包含了对 sqlite 数据库的连接和操作,可以让你了解 sqlite 数据库的基本用法。 此外,该资源文件还包含了一个使用 qsqltablemodel 类和 qt 控件实现的简单的学生管理系统,可以让你更深入地了解 qsqltablemodel 类的使用和 qt 数据库编程的实战应用。通过学习和实践,你可以在实际应用中运用到这些知识,提高自己的编程水平和实践能力。 总之,qt 数据库实战之 qsqltablemodel 模型.rar 是一份非常有价值的 qt 数据库编程资源,适合想要学习和掌握 qt 数据库编程的开发人员使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

邢仕冲的一亩三分地

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

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

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

打赏作者

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

抵扣说明:

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

余额充值