QSqlTableModel教程

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

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

#include 
#include 
#include 

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 
#include 
#include 
#include 
#include 

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()方法。

你可能感兴趣的:(qt学习,数据库,qt,开发语言)