Qt连接mySQL之学生数据成绩查询系统(添加、删除、修改数据)

  • 添加数据
    前面说到了如何连接数据库,并查询指定内容。为了能实现数据输入,本文直接新建一个对话框 来进行数据输入,通过SQL语句将数据写进表中。这里新添加了一个界面类addDialog,如下:
  • 实现
**adddialog.h文件**
    #ifndef ADDDIALOG_H
    #define ADDDIALOG_H
    #include <QDialog>
    #include <QLineEdit>
    #include <QLabel>
    
    namespace Ui {
    class addDialog;
    }
    
    class addDialog : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit addDialog(QWidget *parent = 0);
        ~addDialog();
    
    private slots:
    void addData();
    
    void on_pushButton_clicked();
    
    void on_pushButton_2_clicked();
    
    private:
        Ui::addDialog *ui;
        QLineEdit *lineEdit;
        QLineEdit *lineEdit_2;
        QLineEdit *lineEdit_3;
        QLineEdit *lineEdit_4;
        QLabel *label_6;
    };
    
    #endif // ADDDIALOG_H

接着,cpp实现文件:

//  adddialog.cpp 文件
#include "adddialog.h"
#include "ui_adddialog.h"
#include <QSqlQuery>
#include <QDebug>
#include <QMessageBox>

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

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

void addDialog::addData(){
    this->show();
    QSqlQuery testQuery;

    if(testQuery.exec("select * from table1 "))

        qDebug()<<"success";
    else
        qDebug()<<"Fail";
}

void addDialog::on_pushButton_clicked()
{
    QMessageBox::information(this,tr("警告") ,tr("确定要添加该项吗?"));
    QSqlQuery  addQuery;

    QString str1 ;
    str1 = ui->lineEdit->text();

    QString str2;
    str2 = ui->lineEdit_2->text();

    QString number1 ;

    number1 = ui->lineEdit_3->text();

    QString number2  ;

    number2 = ui->lineEdit_4->text();

    QString command = QString("INSERT INTO table1 VALUES ('%1', '%2', %3, %4)")
            .arg(str1,str2, number1, number2 );  //添加数据项

    if( addQuery.exec( command )
            )
            ui->label_6->setText(tr("添加成功!"));
     else
            ui->label_6->setText(tr("添加失败!"));
}

void addDialog::on_pushButton_2_clicked()
{
    this->close();
}

这里设计的UI界面为:
Qt连接mySQL之学生数据成绩查询系统(添加、删除、修改数据)

  • 接下来,完成主窗体中数据显示,为了方便查看数据是否录入,因此添加了“查看全部” 按钮。这里仿照先前查看指定行代码,全部信息显示按钮完成的动作如下:
    此处在 mainwindow.cpp文件中完成:
void MainWindow::on_pushButton_5_clicked()
{
    int t = 0;
    QSqlQuery myquery;
    myquery.exec("select * from table1");
    while( myquery.next())
     {
        for(int i = 0; i<4;i++)
        {
        ui->tableWidget->setRowCount(t+1);
        ui->tableWidget->setColumnCount(4);
        QTableWidgetItem *newItem = new QTableWidgetItem(myquery.value(i).toString());
        ui->tableWidget->setItem(t,i,newItem);
        newItem->setTextAlignment(Qt::AlignCenter);
        }

        t++;
        ui->lineEdit->setText(myquery.value(0).toString());
        ui->lineEdit_2->setText(myquery.value(1).toString());
        ui->lineEdit_3->setText(QString::number(myquery.value(3).toInt() ) );
   }
}

这里,也涉及到窗体切换,我们利用信号槽 进行录入界面和 主界面切换。
在主函数中加上以下语句即可实现切换。

 QObject::connect(&w, SIGNAL(go_addDialogWindow()), &adddialog, SLOT(addData()) );

显示效果如下图:
Qt连接mySQL之学生数据成绩查询系统(添加、删除、修改数据)
在这里插入代码片Qt连接mySQL之学生数据成绩查询系统(添加、删除、修改数据)

  • 删除数据
    这里,删除数据的功能在mainwidow.cpp中完成,进入删除按钮 的槽之后,同时做一些必要的鲁棒性处理,比如删除时需要提醒用户,没有行被选中则不能进行删除等。编写如下代码:
void MainWindow::on_pushButton_clicked()  //删除数据按钮
{
    //QMessageBox::information(this, tr("提示"), tr("确定要删除该项吗?"));
    QMessageBox message(QMessageBox::Warning,"提示","确定要删除该项吗?",QMessageBox::Yes|QMessageBox::No,NULL);
    if (message.exec()==QMessageBox::Yes)
    {
    QSqlQuery dequery;

    if(!(ui->tableWidget->item(0,0)) )
        QMessageBox::information(this, tr("提示"), tr("请指定数据项!"));

    else if( ui->tableWidget->item( ui->tableWidget->currentRow() ,0) )
    {

    QString command = QString("delete from table1 where 学号 = '%1' ")
             .arg(ui->tableWidget->item(ui->tableWidget->currentRow(), 0)->text());  //只获取当前表格内容
    dequery.exec(command);
     //**此处注意:必须先执行数据库的数据删除,再进行程序表格中的数据同步删除,顺序不能反,不然删除会出错。**
    ui->tableWidget->removeRow(ui->tableWidget->currentRow());
    }
    else
        return ;
    }
    else
        return;

Qt连接mySQL之学生数据成绩查询系统(添加、删除、修改数据)

  • 修改数据
    在主界面上点击修改数据按钮进去 槽, 在该槽函数下完成数据项的修改,代码片段如下:
    其中在mainwindow.cpp函数
void MainWindow::on_pushButton_4_clicked()  //修改数据按钮
{
    QSqlQuery alterquery;                   //修改数据库行
    QMessageBox message(QMessageBox::Warning,"提示","确定要修改该项吗?",QMessageBox::Yes|QMessageBox::No,NULL);
    if (message.exec()==QMessageBox::Yes){
        if(!(ui->tableWidget->item(0,0)) )
            QMessageBox::information(this, tr("提示"), tr("请指定修改的数据项!"));
        else
            {
            QString str1 = ui->tableWidget->item(ui->tableWidget->currentRow(), 0)->text();
            QString str2 = ui->tableWidget->item(ui->tableWidget->currentRow(), 1)->text();
            QString number1 = ui->tableWidget->item(ui->tableWidget->currentRow(), 2)->text();
            QString number2 = ui->tableWidget->item(ui->tableWidget->currentRow(), 3)->text();

            QString command = QString("UPDATE  table1 set 学号 = '%1', 姓名 = '%2', "
                                      "班级 = %3, 总成绩 = %4  WHERE 学号 = '%5'")
                    .arg(str1, str2, number1, number2 , str1);  //添加数据项
            alterquery.exec(command);
            }
    }
}

Qt连接mySQL之学生数据成绩查询系统(添加、删除、修改数据)