Qt学习笔记-QSqlModel的事物操作

程序运行截图如下:



代码如下:

connection.h

#ifndef CONNECTION_H
#define CONNECTION_H

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>

static bool createConnection(){
    QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("my.db");
    if(!db.open()){
        QMessageBox::critical(NULL,"打开失败","不能建立连接.");
        return false;
    }
    QSqlQuery query;
    query.exec("create table student (id int primary key, "
               "name varchar, course int)");
    query.exec("insert into student values(1, '球球', 11)");
    query.exec("insert into student values(2, '腿腿', 11)");
    query.exec("insert into student values(3, '小美', 12)");
    query.exec("create table course (id int primary key, "
               "name varchar, teacher varchar)");

    query.exec("insert into course values(10, '数学', '王老师')");
    query.exec("insert into course values(11, '英语', '张老师')");
    query.exec("insert into course values(12, '计算机', '白老师')");
    return true;
}

#endif // CONNECTION_H

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QSqlTableModel;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_8_clicked();

private:
    Ui::MainWindow *ui;
    QSqlTableModel *model;
};

main.cpp

#include "mainwindow.h"
#include <QApplication>

#include "connection.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if(!createConnection())
        return 1;

    MainWindow w;
    w.show();

    return a.exec();
}


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QSqlRelationalTableModel>
#include <QTableView>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    model=new QSqlTableModel(this);
    model->setTable("student");
    model->select();
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    ui->tableView->setModel(model);
}

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

void MainWindow::on_pushButton_clicked()
{
    QString name=ui->lineEdit->text();
    model->setFilter(QString("name=%1").arg(name));
    model->select();
}

void MainWindow::on_pushButton_2_clicked()
{
    model->setTable("student");
    model->select();
}

void MainWindow::on_pushButton_3_clicked()
{
    model->database().transaction();
    if(model->submitAll()){
        if(model->database().commit()){
            QMessageBox::information(this,"tableModel","数据修改成功!");
        }
    }
    else{
        model->database().rollback();
        QMessageBox::warning(this,"tableModel",tr("数据库错误:%1").arg(model->lastError().text()));
    }
}

void MainWindow::on_pushButton_4_clicked()
{
    model->revertAll();
}

void MainWindow::on_pushButton_5_clicked()
{
    int rowNum=model->rowCount();
    int id=10;
    model->insertRow(rowNum);
    model->setData(model->index(rowNum,0),id);

}

void MainWindow::on_pushButton_6_clicked()
{
    int curRow=ui->tableView->currentIndex().row();
    model->removeRow(curRow);
    int ok=QMessageBox::warning(this,"删除当前行","你确定要删除?",QMessageBox::Yes,QMessageBox::No);
    if(ok==QMessageBox::No)
        model->revertAll();
    else
        model->submitAll();
}

void MainWindow::on_pushButton_7_clicked()
{
    model->setSort(0,Qt::AscendingOrder);
    model->select();
}

void MainWindow::on_pushButton_8_clicked()
{
    model->setSort(0,Qt::DescendingOrder);
    model->select();
}


猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/80763525