头文件
#ifndef STUSQLDIALOG_H
#define STUSQLDIALOG_H
#include <QDialog>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>
#include <QMessageBox>
namespace Ui {
class stuSqlDialog;
}
class stuSqlDialog : public QDialog
{
Q_OBJECT
public:
explicit stuSqlDialog(QWidget *parent = 0);
~stuSqlDialog();
private:
//创建数据库
void createDB();
//创建数据表
void createTable();
//查询
void queryTable();
private slots:
//插入按钮槽函数
void on_pushButton_intsert_clicked();
//删除按钮槽函数
void on_pushButton_deleta_clicked();
//修改按钮槽函数
void on_pushButton_update_clicked();
//排序按钮槽函数
void on_pushButton_sort_clicked();
private:
Ui::stuSqlDialog *ui;
QSqlDatabase db;//建立QT和数据库链接
QSqlQueryModel model;//保存结果集
};
#endif // STUSQLDIALOG_H
源文件
#include "stusqldialog.h"
#include "ui_stusqldialog.h"
//解决输出中文乱码
//#if _MSC_VER >= 1600
//#pragma execution_character_set("utf-8")
//#endif
//或
#pragma execution_character_set("utf-8")
stuSqlDialog::stuSqlDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::stuSqlDialog)
{
ui->setupUi(this);
createDB();
createTable();
queryTable();
}
stuSqlDialog::~stuSqlDialog()
{
delete ui;
}
//创建数据库
void stuSqlDialog::createDB()
{
//添加数据库驱动
db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库名字(文件名)
db.setDatabaseName("student.db");
//打开数据库
if(db.open()==true){
qDebug() << "创建/打开数据库成功。";
}
else{
qDebug() << "创建/打开数据库失败。";
}
}
//创建数据表
void stuSqlDialog::createTable()
{
QSqlQuery query;//无参创建,针对之前打开的默认数据库
QString str = QString("CREATE TABLE student("
"id INT PRIMARY KEY NOT NULL,"
"name TEXT NOT NULL,"
"score REAL NOT NULL)");
if(query.exec(str)==false){//执行sql语句
qDebug() << str;
}
else{
qDebug() << "创建数据表成功。";
}
}
//查询显示数据表
void stuSqlDialog::queryTable()
{
QString str = QString("SELECT * FROM student");
model.setQuery(str);
ui->tableView->setModel(&model);//控件显示数据表
}
//插入按钮槽函数
void stuSqlDialog::on_pushButton_intsert_clicked()
{
QSqlQuery query;
//获取学号、姓名、分数
int id = ui->lineEdit_id->text().toInt();
if(id == 0){
QMessageBox::critical(this,"ERROR","ID输入错误");
return;
}
QString name = ui->lineEdit_name->text();
if(name == ""){
QMessageBox::critical(this,"ERROR","姓名输入错误");
return;
}
double score = ui->lineEdit_score->text().toDouble();
if(score < 0 || score > 100){
QMessageBox::critical(this,"ERROR","成绩输入错误");
return;
}
QString str = QString("INSERT INTO student VALUES(%1,'%2',%3)").arg(id).arg(name).arg(score);
if(query.exec(str) == false){
qDebug() << str;
}
else{
qDebug() << "插入数据成功。";
queryTable();
}
}
//删除按钮槽函数
void stuSqlDialog::on_pushButton_deleta_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,"删除","确定要删除吗",QMessageBox::Yes|QMessageBox::No) == QMessageBox::No){
return;
}
if(query.exec(str) == false){
qDebug() << str;
}
else{
qDebug() << "删除数据成功。";
queryTable();
}
}
//修改按钮槽函数
void stuSqlDialog::on_pushButton_update_clicked()
{
QSqlQuery query;
//获取学号、分数
int id = ui->lineEdit_id->text().toInt();
double score = ui->lineEdit_score->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{
qDebug() << "修改数据成功。";
queryTable();
}
}
//排序按钮槽函数
void stuSqlDialog::on_pushButton_sort_clicked()
{
//获取排序依据
QString value = ui->comboBox_value->currentText();//列名称与ui界面排序依据一致
//获取排序方式
QString condition;
if(ui->comboBox_cond->currentIndex() == 0){
condition = "ASC";//升序
}
else{
condition = "DESC";
}
QString str = QString("SELECT * FROM student ORDER BY %1 %2").arg(value).arg(condition);
model.setQuery(str);//将查询结果保存到model对象
ui->tableView->setModel(&model);//重新显示
}
ui界面
https://www.bilibili.com/video/BV1Wf4y1Y7uh?p=22