学习Qt后即用Qt5.12的版本进一步学习sql增-删-改-查。
第一步:新建Qt项目。
第二步:设计UI界面。
第三步:在pro文件中增加语句
QT += sql
第四步:.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase> //专用于连接、创建数据库
#include <QSqlQuery> //专用于DML(数据操纵语言)、DDL(数据定义语言)
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>
#include <QMessageBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btn_datasorting_clicked();
void on_btn_insert_clicked();
void on_btn_delete_clicked();
void on_btn_renew_clicked();
void on_btn_query_clicked();
private: //自定义函数
void CreateDatabaseFunc(); //创建SQLite数据库
void CreateTableFunc(); //创建SQLite数据表
void QueryTableFunc(); //执行查询操作
void CleanEdit();
QSqlDatabase sqldb; //创建Qt和数据库连接
QSqlQueryModel sqlmodel; //存储结果集
private:
Ui::MainWindow *ui;
QStringList SortWay;
QStringList ValueWay;
};
#endif // MAINWINDOW_H
第五步:.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("学生管理系统");
SortWay<<"升序"<<"降序";
ui->comBox_sort->addItems(SortWay);
ValueWay<<"id"<<"name"<<"score";
ui->comBox_value->addItems(ValueWay);
CreateDatabaseFunc(); //调用函数创建且打开数据库
CreateTableFunc(); //创建SQLite数据表
QueryTableFunc(); //查询数据库
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::CreateDatabaseFunc() //创建且打开SQLite数据库
{
//1.添加数据库驱动
sqldb=QSqlDatabase::addDatabase("QSQLITE");
//2.设置数据库名称
sqldb.setDatabaseName("student.db");
//3.打开此数据库是否成功
if(sqldb.open()==true)
{
QMessageBox::information(this,"正确","恭喜你,数据库打开成功!",QMessageBox::Ok);
}
else
{
QMessageBox::critical(this,"错误","数据库打开失败,请重新检测!",QMessageBox::Ok);
}
}
void MainWindow::CreateTableFunc() //创建SQLite数据表
{
QString strsql;
QSqlQuery createquery;
//创建SQL语句
strsql=QString("CREATE TABLE student ("
"id INT PRIMARY KEY NOT NULL,"
"name TEXT NOT NULL,"
"score REAL NOT NULL)");
//执行SQL语句
if(createquery.exec(strsql)==false)
{
QMessageBox::critical(this,"失败","数据表创失败,请重新检测!",QMessageBox::Ok);
}
else
{
QMessageBox::information(this,"成功","恭喜你,数据表创建成功!",QMessageBox::Ok);
}
}
void MainWindow::QueryTableFunc() //查询数据库
{
QString str=QString("SELECT * FROM student");
sqlmodel.setQuery(str);
ui->tableView->setModel(&sqlmodel);
}
void MainWindow::on_btn_datasorting_clicked() //排序
{
//获取排序列名
QString value=ui->comBox_value->currentText();
//获取排序方式名字
QString condition;
if(ui->comBox_sort->currentIndex()==0){
condition="ASC";
}else{
condition="DESC";
}
QString str=QString("SELECT * FROM student ORDER BY %1 %2").arg(value).arg(condition);
//查询显示
sqlmodel.setQuery(str);
ui->tableView->setModel(&sqlmodel);
}
void MainWindow::on_btn_insert_clicked() //插入数据
{
QSqlQuery sqlquery;
int id=ui->lineEdit_ID->text().toInt();
QString name=ui->lineEdit_name->text();
double score=ui->lineEdit_achieve->text().toDouble();
if(id==0)
{
QMessageBox::critical(this,"失败","提示:输入错误?学号不能为0?",QMessageBox::Ok);
return;
}
if(name=="")
{
QMessageBox::critical(this,"失败","提示:输入错误?姓名不能为空?",QMessageBox::Ok);
return;
}
if(score<0 || score>100)
{
QMessageBox::critical(this,"失败","提示:输入错误?分数范围(0-100)",QMessageBox::Ok);
return;
}
QString strs=QString("INSERT INTO student (id,name,score) VALUES(%1,'%2',%3)"
).arg(id).arg(name).arg(score);
//执行SQL语句
if(sqlquery.exec(strs)==false)
{
QMessageBox::critical(this,"失败","向数据表插入数据失败,请重新检测!",QMessageBox::Ok);
}
else
{
QMessageBox::information(this,"成功","恭喜你,向数据表插入数据成功!",QMessageBox::Ok);
QueryTableFunc();
CleanEdit();
}
}
void MainWindow::on_btn_delete_clicked() //删除
{
QSqlQuery query;
int id=ui->lineEdit_ID->text().toInt();
QString str= QString("DELETE FROM student WHERE id = %1").arg(id);
if(QMessageBox::question(this,"DELETE","ARE YOU SURE?",QMessageBox::Yes|QMessageBox::No)
==QMessageBox::No)
{
return;
}
if(query.exec(str)==false)
{
qDebug()<<str;
}
else
{
CleanEdit();
qDebug()<<"Delete success";
QueryTableFunc();
}
}
void MainWindow::on_btn_renew_clicked() //更新
{
QSqlQuery query;
int id=ui->lineEdit_ID->text().toInt();
double score=ui->lineEdit_achieve->text().toDouble();
QString str=QString("UPDATE student SET score=%1 WHERE id=%2").arg(score).arg(id);
if(query.exec(str)==false){
qDebug()<<str;
}else{
CleanEdit();
qDebug()<<"Update success";
QueryTableFunc();
}
}
void MainWindow::on_btn_query_clicked() //查询
{
QueryTableFunc();
}
void MainWindow::CleanEdit() //清空输入框
{
ui->lineEdit_ID->clear();
ui->lineEdit_name->clear();
ui->lineEdit_achieve->clear();
}
第六步:编译生成可执行文件