目录

  • 完整代码如下:
    • .cpp文件
    • .h文件

图示结果:

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

一、总结
在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_OBJECTpublic: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

Qt数据库---图书管理系统相关推荐

  1. Oracle数据库图书管理系统的课程设计

    Oracle数据库图书管理系统的课程设计 在Oracle数据库最初的sys用户XE数据库下执行: --删除表空间 drop tablespace tablespace_book including c ...

  2. 用Qt搭建图书管理系统(三)

    第三章 登陆界面 https://gitee.com/mayonaka/LibraryManageSystem 百度云:https://pan.baidu.com/s/1G95yPyGG080b6yX ...

  3. C#数据库图书管理系统

    一,设计目的 通过模拟图书管理系统,实现以下功能 学生账号的注册 学生对馆藏图书状况的查询 学生借书,还书状态的查询 学生借书以及归还图书 学生欠款的查询 二,框架分析 数据库主要包括: 学生表:学生 ...

  4. 用Qt搭建图书管理系统 (十四)

    初始化数据库 https://gitee.com/mayonaka/LibraryManageSystem​​​​​​​ 百度云:https://pan.baidu.com/s/1G95yPyGG08 ...

  5. 数据库使用SQL语句创建数据库-图书管理系统例

    模板: SQL数据库创建 CREATE DATABASE <数据库名> ON PRIMARY ( NAME = <主逻辑名>, FILENAME = '<文件路径> ...

  6. JavaSwing+MySQL图书管理系统,功能全部实现界面可改

    Java+Swing+mysql5实现图书管理系统 系统说明:本系统采用eclipse开发,IDEA,eclipse,myeclipse均可运行 界面采用swing实现 数据库:mysql,附sql代 ...

  7. [mysql+qt] 图书管理系统

    关于乱码问题:         后来亲测加上qstringliteral有效,而官方给出的tr函数,似乎对中文没啥用 出现编码错误,如字符常量这些,是qt自身的问题,用记事本存为utf-8应该就好了. ...

  8. 图书管理系统python pycharm 数据库

    目   录 目   录 第1章 引言 1 1.1课题的研究背景 1 1.2研究意义 1 第2章 系统分析 3 2.1可行性分析 3 2.2分析需求 3 2.3功能需求 3 2.4系统性能需求 4 第3 ...

  9. python PySide6 图书管理系统结合数据库实战教程之登录-注册界面(保姆级教程)(后续更新)

    首先默认安装了mysql8.0.29,默认安装了python. 此项目用到了python的第三方库PySide6.pymysql.pyinstaller. 目录 安装第三方库 数据库建表 py文件 注 ...

最新文章

  1. 王者荣耀赛季末上分很枯燥,可以找一个猎游陪练一起上分
  2. sklearn综合示例5:多分类分类器
  3. RHEL5.8配置开机自动挂载磁盘
  4. java版mosquitto客户端使用SSL功能的具体操作总结
  5. 外媒:美国做空机构浑水放弃做空特斯拉
  6. 办信用卡被拒绝是什么原因?
  7. sv_labs学习笔记 专栏说明博文目录
  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用...
  9. Android中ListActivity的使用和在ListView中添加图片文字
  10. 算法第四版开发环境的配置
  11. 计算机网络基础ios指令,IOS快捷指令制作真正的贴吧每天全自动签到
  12. linux 安装qq2014,Ubuntu14.04安装wine QQ
  13. 关于浮点误差,1为何变成0.999999 ?
  14. 计算机系统盘怎么扩充,c盘扩大,教您怎么把c盘扩大
  15. MAYA打造地震后的古城场景-3D建模场景模型教程
  16. asa清空配置_思科ASA基本配置
  17. jpa执行插入报error performing isolated work错误
  18. 一个合适的交换机高清视频监控网络
  19. APS高级计划与排程系统基本概念和功能说明
  20. SIFT经典论文翻译版

热门文章

  1. Linux下程序的Profiling工具-性能测试工具GNU gprof
  2. 在TeXShop中使用中文(for Mac OS)
  3. C# 多线程详细讲解
  4. 南京信息工程大学第二届程序设计大赛团体赛:B-负鼠的工资
  5. 第一章:合约 Contracts
  6. uniapp华为手机真机运行方法
  7. Java语言特点与学习
  8. html访问微信云数据库,node.js 抓取网页内容(针对微信小程序云开发)
  9. word无法启动转换器html32,Word无法启动转换器(2种原因)
  10. 解决连接oracle报错 尝试加载Oracle客户端库时引发BadImageFomatException。如果在安装64位Oracle客户端组件的情况下以32位模式运行,将出现此问题的报错。