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界面为:
- 接下来,完成主窗体中数据显示,为了方便查看数据是否录入,因此添加了“查看全部” 按钮。这里仿照先前查看指定行代码,全部信息显示按钮完成的动作如下:
此处在 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()) );
显示效果如下图:在这里插入代码片
- 删除数据
这里,删除数据的功能在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;
- 修改数据
在主界面上点击修改数据按钮进去 槽, 在该槽函数下完成数据项的修改,代码片段如下:
其中在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);
}
}
}