Qt数据库---图书管理系统

图示结果:在这里插入图片描述
在这里插入图片描述
制作一个简单的数据库,可以实现数据的增、删、改、查的图书馆管理,如果在使用数据库后,没有清除记录,那么下一次打开的时候,仍然会保存上一次执行的记录操作。这就是数据库的优势所在,以下是具体的操作以及代码。

一、总结
在Qt中使用书库,执行流程为一下操作:
(1)、安装驱动【Qt中的驱动一般情况下是QSQLITE】
(2)、给数据库起名字,或者也可以从组件上获取自定义数据库名字
(3)、打开数据库
(4)、创建表

二、执行增、删、改、查
将以上4步完成之后,那就可以实现数据库的增、删、改、查。我在下面代码中有详细的解释以及操作,很容易理解。

三、主要知识点
(1)、QSqlQuery:类提供了一种执行和操作SQL语句的方法
(2)、QSqlDatabase类:用来处理与数据库的连接
(3)、QSqlError类:用来输出数据库中的错误信息

//添加数据库成员
//添加数据时,不要将添加命令写错,不然就会报错,不能实现数据库的添加
void Library::on_addButton_clicked()
{
     QSqlQuery query;
     //获取组件上的内容
     QString name   = ui->addnameLE->text();
     QString price  = ui->addpriceLE->text();
     QString author = ui->addAutherLE->text();
     QString nums   = ui->addNumsLE->text();
     QString cmd = QString("insert into library values(\"%1\",\"%2\",\"%3\",\"%4\");").arg(name).arg(price).arg(author).arg(nums);
     if(!query.exec(cmd))//添加数据库
     {
         qDebug() << "Error to Insert Into Database " << myDatabase.lastError();
         return;
     }
//数据添加之后,将小部件清空
     ui->addNumsLE->clear();
     ui->addpriceLE->clear();
     ui->addnameLE->clear();
     ui->addAutherLE->clear();
}

//删除数据库成员
void Library::on_deleteButton_clicked()
{
    QSqlQuery query;
    //根据名字删除,或者根据作者删除
    QString name   = ui->deleleNameLE->text();
    QString author = ui->deleteAutherLE->text();

    QString cmd = QString("delete from library where name =\"%1\" or author = \"%2\";").arg(name).arg(author);
    if(!query.exec(cmd))//执行删除命令
    {
        qDebug() << "Error to delete Database " << myDatabase.lastError();
        return;
    }

    //清除小部件内容
    ui->deleleNameLE->clear();
    ui->deleteAutherLE->clear();

}

//修改数据库成员
void Library::on_updateButton_clicked()
{
    QSqlQuery query;
    //获取修改之前的组件上的内容
    QString name   = ui->newUPNameLE->text();
    QString price  = ui->newUPPriceLE->text();
    QString author = ui->newUPAutherLE->text();
    QString nums   = ui->newUPNumberLE->text();
	
	//获取修改后的组件上的内容
    QString nameLast   = ui->lastNameUPLE->text();
    QString priceLast  = ui->lastPrice->text();
    QString authorLast = ui->lastAuther->text();
    QString numsLast   = ui->lastNums->text();

	//执行修改指令
    QString cmd = QString("update library set name = \"%1\" , price = \"%2\" where name = \"%3\" ;").arg(nameLast).arg(priceLast).arg(name);
    if(!query.exec(cmd))
    {
       qDebug() << "Error Update to Database" << myDatabase.lastError();
       return;
    }

    //清除小部件中的内容
    ui->lastNameUPLE->clear();
    ui->lastNums->clear();
    ui->lastPrice->clear();
    ui->lastAuther->clear();
    ui->newUPNameLE->clear();
    ui->newUPPriceLE->clear();
    ui->newUPAutherLE->clear();
    ui->newUPNumberLE->clear();
}

//查询数据库成员
void Library::on_serchButton_clicked()
{

    QSqlQuery query;
    QString cmd = QString("select * from library");//查询数据库
    if(!query.exec(cmd))//判断数据库是否为空
    {
       qDebug() << "Error Select to Database" << myDatabase.lastError();
       return;
    }

    QSqlRecord record = query.record();//获取当前记录
	//获取每一个记录下的索引
    int num1 = record.indexOf("name");
    int num2 = record.indexOf("price");
    int num3 = record.indexOf("author");
    int num4 = record.indexOf("nums");
    int i=0;
    int j=0;
    while (query.next())
    {

        QString info = QString("%1   %2   %3   %4").arg(query.value(num1).toString()).arg(query.value(num2).toDouble()).arg(query.value(num3).toString()).arg(query.value(num4).toInt());

        //在表格中显示信息
        ui->tableWidget->setItem(i,j  ,new QTableWidgetItem(query.value(num1).toString()));
        ui->tableWidget->setItem(i,j+1,new QTableWidgetItem(query.value(num2).toString()));
        ui->tableWidget->setItem(i,j+2,new QTableWidgetItem(query.value(num3).toString()));
        ui->tableWidget->setItem(i,j+3,new QTableWidgetItem(query.value(num4).toString()));
        i++;
    }
}

完整代码如下:

.cpp文件

这是.cpp文件
#include "library.h"
#include "ui_library.h"
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QDebug>

Library::Library(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Library)
{
    ui->setupUi(this);
    //1、安装驱动
    myDatabase = QSqlDatabase::addDatabase("QSQLITE");

    //2、给数据库取名字
    myDatabase.setDatabaseName("library.db");

    //3、打开数据库
    if(!myDatabase.open())
    {
        qDebug() << "Error to open database" << myDatabase.lastError();
        return;
    }
}

Library::~Library()
{
    delete ui;
}

//创建数据库
void Library::on_createButton_clicked()
{
    QSqlQuery query;
    /*
        创建一个表:
        表名:library
        成员:name  、price 、 author  、 nums

        执行命令:create  table (if not exists:如果不存在,则创建)表名(成员 类型,……)
    */

    if(!query.exec("create table if not exists library(name text, price double ,author text, nums int);"))
    {
        qDebug() << "Create Table is error" << myDatabase.lastError();
        return;
    }
}

//添加数据库成员
void Library::on_addButton_clicked()
{
     QSqlQuery query;
     QString name   = ui->addnameLE->text();
     QString price  = ui->addpriceLE->text();
     QString author = ui->addAutherLE->text();
     QString nums   = ui->addNumsLE->text();
     QString cmd = QString("insert into library values(\"%1\",\"%2\",\"%3\",\"%4\");").arg(name).arg(price).arg(author).arg(nums);
     if(!query.exec(cmd))
     {
         qDebug() << "Error to Insert Into Database " << myDatabase.lastError();
         return;
     }
     ui->addNumsLE->clear();
     ui->addpriceLE->clear();
     ui->addnameLE->clear();
     ui->addAutherLE->clear();

}

//删除数据库成员
void Library::on_deleteButton_clicked()
{
    QSqlQuery query;
    QString name   = ui->deleleNameLE->text();
    QString author = ui->deleteAutherLE->text();

    QString cmd = QString("delete from library where name =\"%1\" or author = \"%2\";").arg(name).arg(author);
    if(!query.exec(cmd))
    {
        qDebug() << "Error to delete Database " << myDatabase.lastError();
        return;
    }

    //清除小部件内容
    ui->deleleNameLE->clear();
    ui->deleteAutherLE->clear();

}


//修改数据库成员
void Library::on_updateButton_clicked()
{
    QSqlQuery query;
    QString name   = ui->newUPNameLE->text();
    QString price  = ui->newUPPriceLE->text();
    QString author = ui->newUPAutherLE->text();
    QString nums   = ui->newUPNumberLE->text();

    QString nameLast   = ui->lastNameUPLE->text();
    QString priceLast  = ui->lastPrice->text();
    QString authorLast = ui->lastAuther->text();
    QString numsLast   = ui->lastNums->text();

    QString cmd = QString("update library set name = \"%1\" , price = \"%2\" where name = \"%3\" ;").arg(nameLast).arg(priceLast).arg(name);
    if(!query.exec(cmd))
    {
       qDebug() << "Error Update to Database" << myDatabase.lastError();
       return;
    }

    //清除小部件中的内容
    ui->lastNameUPLE->clear();
    ui->lastNums->clear();
    ui->lastPrice->clear();
    ui->lastAuther->clear();
    ui->newUPNameLE->clear();
    ui->newUPPriceLE->clear();
    ui->newUPAutherLE->clear();
    ui->newUPNumberLE->clear();
}

//查询数据库成员
void Library::on_serchButton_clicked()
{

    QSqlQuery query;
    QString cmd = QString("select * from library");//查询数据库
    if(!query.exec(cmd))//判断数据库是否为空
    {
       qDebug() << "Error Select to Database" << myDatabase.lastError();
       return;
    }

    QSqlRecord record = query.record();//获取当前记录

    int num1 = record.indexOf("name");
    int num2 = record.indexOf("price");
    int num3 = record.indexOf("author");
    int num4 = record.indexOf("nums");
    int i=0;
    int j=0;
    while (query.next())
    {

        QString info = QString("%1   %2   %3   %4").arg(query.value(num1).toString()).arg(query.value(num2).toDouble()).arg(query.value(num3).toString()).arg(query.value(num4).toInt());

        //在表格中显示信息
        ui->tableWidget->setItem(i,j  ,new QTableWidgetItem(query.value(num1).toString()));
        ui->tableWidget->setItem(i,j+1,new QTableWidgetItem(query.value(num2).toString()));
        ui->tableWidget->setItem(i,j+2,new QTableWidgetItem(query.value(num3).toString()));
        ui->tableWidget->setItem(i,j+3,new QTableWidgetItem(query.value(num4).toString()));
        i++;
    }
}


//关闭数据库
void Library::on_closeButton_clicked()
{
    myDatabase.close();
}

//删除数据库
void Library::on_deleteButton_2_clicked()
{
    QSqlQuery query;
    QString cmd = QString("drop table library");//删除整个数据库
    query.exec(cmd);
}

.h文件

这是.h文件
#ifndef LIBRARY_H
#define LIBRARY_H

#include <QMainWindow>
#include <QSqlDatabase>

namespace Ui {
class Library;
}

class Library : public QMainWindow
{
    Q_OBJECT

public:
    explicit Library(QWidget *parent = nullptr);
    ~Library();

private slots:
    //1、创建表
    void on_createButton_clicked();

    //2、添加数据
    void on_addButton_clicked();

    //3、删除数据
    void on_deleteButton_clicked();

    //4、更新数据
    void on_updateButton_clicked();

    //5、查询数据
    void on_serchButton_clicked();

    //6、关闭数据库
    void on_closeButton_clicked();

    //7、清空数据库
    void on_deleteButton_2_clicked();

private:
    Ui::Library *ui;
    QSqlDatabase myDatabase;
};

#endif // LIBRARY_H

  • 12
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44585751

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值