QSqlTableModel教程

QSqlTableModel是Qt中的一个模型类,用于访问数据库表格中的数据。它继承自QAbstractTableModel,具有QAbstractTableModel的所有特性和功能,同时还提供了与数据库相关的接口以及自动更新功能使用QSqlTableModel可以方便地将数据库表格中的数据显示在Qt的视图组件中,比如QTableView。

下面是一个使用QSqlTableModel的示例:

#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QTableView>

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);

    // 连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test");
    db.setUserName("root");
    db.setPassword("password");
    if (!db.open()) {
        qDebug() << "Failed to connect to database";
        return -1;
    }

    // 创建QSqlTableModel对象
    QSqlTableModel* model = new QSqlTableModel();

    // 设置QSqlTableModel的数据表  即查询student的表
    model->setTable("students");

    // 设置QSqlTableModel的编辑策略
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    // 加载数据
    model->select();

    // 创建QTableView对象
    QTableView* tableView = new QTableView();

    // 设置QTableView的模型
    tableView->setModel(model);

    // 显示QTableView
    tableView->show();

    return app.exec();
}

该示例代码连接了一个名为test的MySQL数据库,然后创建了一个QSqlTableModel对象,将其数据表设置为students。接着,设置了QSqlTableModel的编辑策略为OnManualSubmit,表示只有在手动提交的情况下才会更新数据库。然后,调用select()方法加载数据,并将QSqlTableModel设置为QTableView的模型,最后显示QTableView。这样就可以将students表格中的数据显示在QTableView中。

需要注意的是,QSqlTableModel只能用于单表查询,如果需要进行多表查询,应该使用QSqlQueryModel。此外,QSqlTableModel还提供了一些其他的接口,比如setData()、insertRows()、removeRows()等,用于对数据库进行增删改操作。

2.实现增删查改

#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QTableView>
#include <QSqlRecord>
#include <QSqlField>

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);

    // 连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test");
    db.setUserName("root");
    db.setPassword("password");
    if (!db.open()) {
        qDebug() << "Failed to connect to database";
        return -1;
    }

    // 创建QSqlTableModel对象
    QSqlTableModel* model = new QSqlTableModel();

    // 设置QSqlTableModel的数据表
    model->setTable("students");

    // 设置QSqlTableModel的编辑策略
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    // 加载数据到模型中
    model->select();

    // 创建QTableView对象
    QTableView* tableView = new QTableView();

    // 设置QTableView的模型
    tableView->setModel(model);

    // 显示QTableView
    tableView->show();

    // 插入数据
    QSqlRecord record;
    QSqlField idField("id", QVariant::Int);
    QSqlField nameField("name", QVariant::String);
    QSqlField ageField("age", QVariant::Int);
    idField.setAutoValue(true);
    nameField.setValue("Tom");
    ageField.setValue(20);
    record.append(idField);
    record.append(nameField);
    record.append(ageField);
    model->insertRecord(-1, record);

    // 删除数据
    int row = 0; // 要删除的行号
    model->removeRow(row);

    // 修改数据
    int row = 0; // 要修改的行号
    int column = 1; // 要修改的列号
    QVariant value = "Jerry"; // 修改后的值
    model->setData(model->index(row, column), value);

    // 提交数据更改
    model->submitAll();

    return app.exec();
}

该示例代码连接了一个名为test的MySQL数据库,然后创建了一个QSqlTableModel对象,将其数据表设置为students。接着,设置了QSqlTableModel的编辑策略为OnManualSubmit,表示只有在手动提交的情况下才会更新数据库。然后,调用select()方法加载数据,并将QSqlTableModel设置为QTableView的模型,最后显示QTableView。

在示例代码的后面,通过insertRecord()方法插入了一条新数据,通过removeRow()方法删除了一条数据,通过setData()方法修改了一条数据的值。最后,通过submitAll()方法提交数据更改。

需要注意的是,QSqlTableModel的insertRecord()和removeRow()方法只是将数据插入或删除到模型中,并不会立即更新数据库。如果要更新数据库,需要调用submitAll()或submitRow()方法。对于修改数据的操作,setData()方法会自动提交更改,不需要再调用submitAll()方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值