QT6对数据库操作---增删改查
QT6对数据库增删改查操作还是比较简单的,只要会数据库操作的都没问题。本项目中对数据库操作,主要有四步在.pro文件中增加对数据库的支持配置数据库新建学生成绩表进行增删改查操作1、在.pro文件中增加对数据库的支持使用数据库就需要在项目文件.pro中加上这句话 QT += sqlQT+= core guiQT+= sql2、配置数据库void MainWindow::openDataBase(){
·
QT6对数据库增删改查操作还是比较简单的,只要会数据库操作的都没问题。
本项目中对数据库操作,主要有四步
- 在.pro文件中增加对数据库的支持
- 配置数据库
- 新建学生成绩表
- 进行增删改查操作
1、在.pro文件中增加对数据库的支持
使用数据库就需要在项目文件.pro中加上这句话 QT += sql
QT += core gui
QT += sql
2、配置数据库
void MainWindow::openDataBase(){
// QMYSQLDriver
db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //数据库服务器
db.setPort(3306);
db.setUserName("root"); //数据库用户名
db.setPassword("root"); //数据库密码
db.setDatabaseName("test"); //数据库名
if(db.open()==true)
qDebug() <<"数据库打开成功";
else
qDebug() <<"数据库打开失败";
}
3、新建学生成绩表
注意:程序中使用的是UTF-8格式
void MainWindow::createTable(){
QSqlQuery query;
QString str=QString("create table student( id int primary key not null, name varchar(12),score float(4,1)) DEFAULT CHARSET utf8 COLLATE utf8_general_ci");
if(!query.exec(str))
qDebug()<< " error: "<<query.lastError();
else qDebug()<< "创建表成功!"<<str;
}
4、进行增删改查操作
- 删除操作在on_delButton_clicked()方法中
- 新增、修改操作在on_saveButton_clicked()方法中
- 查询操作在queryTable()方法中
- 因为都是在一个窗口中的操作,所以源码就两个文件。
ui_mainwindow.h,全部代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void openDataBase();
void createTable();
void queryTable();
void setStatus(int);
private slots:
void on_updateButton_clicked();
void on_insertButton_clicked();
void on_delButton_clicked();
void on_tableView_clicked(const QModelIndex &index);
void on_cancelButton_clicked();
void on_saveButton_clicked();
private:
Ui::MainWindow *ui;
QSqlDatabase db; //数据库
QSqlQueryModel *model;
int editType=0;//0:初始态/1:新增/2:编辑
};
#endif // MAINWINDOW_H
ui_mainwindow.cpp,全部代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
model =new QSqlQueryModel(this);
openDataBase();
createTable();
queryTable();
//选择整行
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
//不可编辑
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
//行头居中
ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignHCenter);
setStatus(0);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_updateButton_clicked()
{
setStatus(2);
}
void MainWindow::on_insertButton_clicked()
{
setStatus(1);
}
void MainWindow::on_delButton_clicked()
{
QSqlQuery query;
query.prepare("delete from student where id = :id");
query.bindValue(":id", ui->idEdit->text().toInt());
if(QMessageBox::question(this,"删除","确定要删除该数据吗?",QMessageBox::Yes|QMessageBox::No) == QMessageBox::No)
return;
if(!query.exec()){
QMessageBox::critical(this,"提示","删除失败!"+query.lastError().text());
return;
}
queryTable();
QMessageBox::critical(this,"提示","删除成功!");
}
void MainWindow::openDataBase(){
// QMYSQLDriver
db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //数据库服务器
db.setPort(3306);
db.setUserName("root"); //数据库用户名
db.setPassword("root"); //数据库密码
db.setDatabaseName("test"); //数据库名
if(db.open()==true)
qDebug() <<"数据库打开成功";
else
qDebug() <<"数据库打开失败";
}
void MainWindow::createTable(){
QSqlQuery query;
QString str=QString("create table student( id int primary key not null, name varchar(12),score float(4,1)) DEFAULT CHARSET utf8 COLLATE utf8_general_ci");
if(!query.exec(str))
qDebug()<< " error: "<<query.lastError();
else qDebug()<< "创建表成功!"<<str;
}
void MainWindow::queryTable(){
editType=0;
model->setQuery("select * from student");
ui->tableView->setModel(model);
model->setHeaderData(0, Qt::Horizontal, tr("学号"));
model->setHeaderData(1, Qt::Horizontal, tr("姓名"));
model->setHeaderData(2, Qt::Horizontal, tr("成绩"));
}
void MainWindow::on_tableView_clicked(const QModelIndex &index)
{
//获取行号
int row =index.row();
//也可以这样
//int row = ui-> tableView ->currentIndex().row();
ui->idEdit->setText(ui->tableView->model()->index(row,0).data().toString());
ui->nameEdit->setText(ui->tableView->model()->index(row,1).data().toString());
ui->scoreEdit->setText(ui->tableView->model()->index(row,2).data().toString());
//或者这样
// ui->idEdit->setText(model->data(model->index(row, 0)).toString());
// ui->nameEdit->setText(model->data(model->index(row, 1)).toString());
// ui->scoreEdit->setText(model->data(model->index(row, 2)).toString());
}
void MainWindow::setStatus(int status){
editType=status;
if(status==1){
ui->idEdit->setText("");
ui->nameEdit->setText("");
ui->scoreEdit->setText("");
ui->idEdit->setEnabled(true);
ui->nameEdit->setEnabled(true);
ui->scoreEdit->setEnabled(true);
ui->cancelButton->setEnabled(true);
ui->saveButton->setEnabled(true);
ui->insertButton->setEnabled(false);
ui->updateButton->setEnabled(false);
ui->delButton->setEnabled(false);
ui->idEdit->setFocus();
return;
}
if(status==2){
ui->idEdit->setEnabled(false);
ui->nameEdit->setEnabled(true);
ui->scoreEdit->setEnabled(true);
ui->cancelButton->setEnabled(true);
ui->saveButton->setEnabled(true);
ui->insertButton->setEnabled(false);
ui->updateButton->setEnabled(false);
ui->delButton->setEnabled(false);
ui->idEdit->setFocus();
return;
}
ui->idEdit->setText("");
ui->nameEdit->setText("");
ui->scoreEdit->setText("");
ui->idEdit->setEnabled(false);
ui->nameEdit->setEnabled(false);
ui->scoreEdit->setEnabled(false);
ui->cancelButton->setEnabled(false);
ui->saveButton->setEnabled(false);
ui->insertButton->setEnabled(true);
ui->updateButton->setEnabled(true);
ui->delButton->setEnabled(true);
}
void MainWindow::on_cancelButton_clicked()
{
setStatus(0);
}
void MainWindow::on_saveButton_clicked()
{
if(ui->idEdit->text() == ""||!ui->idEdit->text().toInt()){
QMessageBox::critical(this,"提示","id不能为空且必须为数字!");
return;
}
if(ui->nameEdit->text() == ""){
QMessageBox::critical(this,"提示","姓名不能为空!");
return;
}
if(ui->scoreEdit->text() == ""||!ui->scoreEdit->text().toFloat()){
QMessageBox::critical(this,"提示","成绩不能为空且必须为数字!");
return;
}
int id = ui->idEdit->text().toInt();
QString name = ui->nameEdit->text();
float score = ui->scoreEdit->text().toFloat();
QSqlQuery query;
if(editType==1){
QSqlQuery query;
query.prepare("insert into student(id,name,score) values(:id,:name,:score)");
query.bindValue(":id", id);
query.bindValue(":name", name);
query.bindValue(":score", score);
if(!query.exec()){
QMessageBox::critical(this,"提示","新增失败!"+query.lastError().text());
return;
}
}
if(editType==2){
query.prepare("update student set name = :name, score = :score where id =:id");
query.bindValue(":id", id);
query.bindValue(":name", name);
query.bindValue(":score", score);
if(!query.exec()){
QMessageBox::critical(this,"提示","修改失败!"+query.lastError().text());
return;
}
}
QMessageBox::critical(this,"提示","保存成功!");
setStatus(0);
queryTable();
}
最终效果
以上仅供参考,如有疑问,欢迎探讨。
更多推荐
已为社区贡献1条内容
所有评论(0)