首先给大家展示成品效果
我把数据库操作单独封装在一个文件夹里了如下:
程序源码://download.csdn.net/download/wanghonghu1/12255206
头文件:
#ifndef DATABASETOOLS_H
#define DATABASETOOLS_H
#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlQuery>
#include<QString>
#include<QtWidgets>
#include<QDebug>
#include"student.h"
#include<QList>
class databasetools
{
public:
databasetools();
static void getDatabase();
//在此函数中,判断数据库是否打开,如果打开则关闭。
static void closeDatabase();
//调用getDatabase函数后,调用此函数可以创建一个表
//表中的字段要求为 学号、姓名、年龄、性别、学院、专业、地址
static void createTable();
//插入一个学生,此函数的参数分别为数据库中的字段值,一一对应
static void insert(QString name,int age,QString sex,QString college,QString major,QString addr);
//根据学号来删除一条数据,参数是学号;例如删除学号为3的同学。
static void delete_row(int no);
//更新学号为no的学生的信息。(除了学号外,其他字段可以更改值)
static void update(int no,QString name,int age,QString sex,QString college,QString major,QString addr);
//查询所有学生,并将所有学生的数据库信息组装为Student对象后,放入QList来作为返回值
static QList<student> query();
//使用学号no查找固定一个学生
static student query(int no);
//静态变量
static QSqlDatabase db;
static QList<student>list;
~databasetools();
};
#endif // DATABASETOOLS_H
源文件:
#include "databasetools.h"
databasetools::databasetools()
{
}
QSqlDatabase databasetools::db;
QList<student> databasetools::list;
void databasetools::getDatabase()
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("stu_info.db");
db.setUserName("123");
if(db.isOpen())
qDebug()<<"open database";
else
qDebug()<<db.lastError();
}
//在此函数中,判断数据库是否打开,如果打开则关闭。
void databasetools::closeDatabase()
{
if(db.isOpen())
{
db.close();
qDebug()<<"close database";
}
}
//调用getDatabase函数后,调用此函数可以创建一个表
//表中的字段要求为 学号、姓名、年龄、性别、学院、专业、地址
void databasetools::createTable()
{
QSqlQuery sql;
sql.prepare("CREATE TABLE IF NOT EXISTS student(no INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NO NULL,age INTEGER,sex TEXT NO NULL,college TEXT NO NULL,major TEXT NO NULL,addr TEXT NO NULL)");
if(sql.exec())
qDebug()<<"create table sucess";
else
qDebug()<<sql.lastError();
}
//插入一个学生,此函数的参数分别为数据库中的字段值,一一对应
void databasetools::insert(QString name, int age, QString sex, QString college, QString major, QString addr)
{
QSqlQuery sql;
sql.prepare("insert into student(name,age,sex,college,major,addr) values(?,?,?,?,?,?)");
sql.bindValue(0,name);
sql.bindValue(1,age);
sql.bindValue(2,sex);
sql.bindValue(3,college);
sql.bindValue(4,major);
sql.bindValue(5,addr);
if(sql.exec())
qDebug()<<"insert table sucess";
else
qDebug()<<sql.lastError();
}
//根据学号来删除一条数据,参数是学号;
void databasetools::delete_row(int no)
{
QSqlQuery sql;
sql.prepare("delete from student where no = ?");
sql.bindValue(0,no);
if(sql.exec())
qDebug()<<"delete table sucess";
else
qDebug()<<sql.lastError();
}
//更新学号为no的学生的信息。(除了学号外,其他字段可以更改值)
void databasetools::update(int no, QString name, int age, QString sex, QString college, QString major, QString addr)
{
QSqlQuery sql;
sql.prepare("update student set name = ?,age = ?,sex = ?,college = ?,major = ?,addr = ? where no = ?");
sql.bindValue(0,name);
sql.bindValue(1,age);
sql.bindValue(2,sex);
sql.bindValue(3,college);
sql.bindValue(4,major);
sql.bindValue(5,addr);
sql.bindValue(6,no);
if(sql.exec())
qDebug()<<"update table sucess";
else
qDebug()<<sql.lastError();
}
//查询所有学生,并将所有学生的数据库信息组装为Student对象后,放入QList来作为返回值
QList<student> databasetools::query()
{
list.clear();
student stu;
QSqlQuery sql;
sql.prepare("select * from student");
if(sql.exec())
{
while(sql.next())
{
stu.no= sql.value(0).toInt();
stu.name= sql.value(1).toString();
stu.age= sql.value(2).toInt();
stu.sex= sql.value(3).toString();
stu.college= sql.value(4).toString();
stu.major= sql.value(5).toString();
stu.addr= sql.value(6).toString();
list.append(stu);
}
}
return list;
}
//使用学号no查找固定一个学生
student databasetools::query(int no)
{
student stu;
QSqlQuery sql;
sql.prepare("select * from student where no = ?");
sql.bindValue(0,no);
sql.exec();
qDebug()<<no;
if(sql.first())
{
stu.no<<sql.value(0).toInt();
stu.name= sql.value(1).toString();
stu.age= sql.value(2).toInt();
stu.sex= sql.value(3).toString();
stu.college= sql.value(4).toString();
stu.major= sql.value(5).toString();
stu.addr= sql.value(6).toString();
// int no = sql.value(0).toInt();
}
else
qDebug()<<sql.lastError();
return stu;
}
databasetools::~databasetools()
{
}
欢迎页面:
#ifndef WELCOME_H
#define WELCOME_H
#include <QDialog>
#include"dialog.h"
#include<QTimer>
namespace Ui {
class welcome;
}
class welcome : public QDialog
{
Q_OBJECT
public:
explicit welcome(QWidget *parent = 0);
~welcome();
private slots:
void on_pushButton_clicked();
private:
Ui::welcome *ui;
Dialog *s;
};
#endif // WELCOME_H
#include "welcome.h"
#include "ui_welcome.h"
welcome::welcome(QWidget *parent) :
QDialog(parent),
ui(new Ui::welcome)
{
ui->setupUi(this);
s = new Dialog(this);
setWindowTitle("王洪虎");
}
welcome::~welcome()
{
delete ui;
}
void welcome::on_pushButton_clicked()
{
s->show();
this->hide();
}