网盘——数据库操作

关于网盘的数据库模块,主要有以下几个内容:定义数据库操作类、将数据库操作类定义成单例模式、数据库操作

数据库是在Qt里面,定义成操作类,专门用这个类产生对象,对数据库实现操作,那么我们在产生对象的时候是把他定义为单例模式这样使用起来会比较方便,在这个函数中我们会对数据库进行各种操作,会把相应的函数操作封装到这个类里面,作为成员函数。

目录

1、准备工作——创建数据库

1.1、输入dir查看目录,所有的注册信息都是保存在服务器端(TcpServer)

1.2、在当前目录下面创建数据库

1.3、在数据库下面创建信息表:用户信息表,好友表

1.4、再添加一个判断是否登陆过,//默认是不在线的,加入在线登陆成功就将这个值置为1,如果在登陆的时候检测到这个值是1的话,就禁止重复登陆。

1.5、创建好友表,id可以对应多个好友,所以主键不可以用id,不能用单个id作为主键。在这里我们把id和friendId同时合成主键

1.6、查看创建表格

1.7、退出来

1.8、看一下目录下面有没有成功创建cloud.db

2、定义数据库操作类

 2.1、在TcpServer里面添加一个新文件,专门用来操作数据库,如果要支持信号槽的话,必须基类选择QObject

3、将数据库定义成单例模式

3.1、定义单例

A、这是一个静态的成员函数

B、通过类名直接来调用

3.2、连接数据库

A、连接数据库,要引用头文件,在operatedb.h里面添加头文件

B、查询数据库,在operatedb.h里面添加头文件

 C、定义成员函数,用来连接数据库

D、将数据库的连接写成一个初始化函数

E、在构造函数里面告诉QsqlDatabase我们要操作的数据库是一个什么数据库(sqlite)

F、按住Alt+enter,添加定义

a、连接数据库

b、需要操作的数据库的名字 ,这个要添加到资源文件

c、插入数据

G、打开数据库

H、调试

a、引入头文件

3.3、析构函数

A、创建析构函数

B、关掉数据库

3.3、运行测试


1、准备工作——创建数据库

在Window下面,按住Win+R,输入cmd,将目录切换到代码目录里面去

1.1、输入dir查看目录,所有的注册信息都是保存在服务器端(TcpServer)

1.2、在当前目录下面创建数据库

sqlite3 cloud.db

1.3、在数据库下面创建信息表:用户信息表,好友表

create table usrInfo(id integer primary key autoincrement,  name varchar(32) unique,pwd varchar(32));

1.4、再添加一个判断是否登陆过,//默认是不在线的,加入在线登陆成功就将这个值置为1,如果在登陆的时候检测到这个值是1的话,就禁止重复登陆。

alter table usrInfo add online integer default 0

1.5、创建好友表,id可以对应多个好友,所以主键不可以用id,不能用单个id作为主键。在这里我们把id和friendId同时合成主键

create table friend(id integer, friendId integer, primary key(id, friendId));

1.6、查看创建表格

.tables

1.7、退出来

.quit

1.8、看一下目录下面有没有成功创建cloud.db

创建成功,数据库已经有啦

2、定义数据库操作类

在服务器端创建数据库操作类

 2.1、在TcpServer里面添加一个新文件,专门用来操作数据库,如果要支持信号槽的话,必须基类选择QObject

3、将数据库定义成单例模式

不管在哪里想要用的时候,直接通过单例的对象就可以快速地使用

3.1、定义单例

就是把它定义一个静态的成员函数

//定义单例,就是把它定义成静态的成员函数,在静态成员函数里面,再定义一个静态的对象,每次通过类名调用静态成员函数的时候,使用静态的局部成员(局部变量),就可以使用到同一个对象。

A、这是一个静态的成员函数

static OperateDB& getInstance();

B、通过类名直接来调用

当我们通过类名调用getInstance的时候,都会返回静态对象的引用,因为他是静态的,所以每次调用都是用一个对象

OperateDB &OperateDB::getInstance()
{//在静态的成员函数里面,再定义一个静态的对象static OperateDB instance;//返回静态对象的引用return instance;
}

3.2、连接数据库

在Qt使用是数据库的时候,要使用到sql模块,在pro里面添加,将sql加载到这个项目文件中

A、连接数据库,要引用头文件,在operatedb.h里面添加头文件

#include <QtSql/QSqlDatabase>

B、查询数据库,在operatedb.h里面添加头文件

#include <QtSql/QSqlQuery>

 C、定义成员函数,用来连接数据库

private:QSqlDatabase m_db;

D、将数据库的连接写成一个初始化函数

  //将数据库的连接写成一个初始化函数void init();

E、在构造函数里面告诉QsqlDatabase我们要操作的数据库是一个什么数据库(sqlite)

OperateDB::OperateDB(QObject *parent) : QObject(parent)
{//在构造函数里面告诉QsqlDatabase我们要操作的数据库是一个什么数据库m_db = QSqlDatabase::addDatabase("QSQLITE");
}

F、按住Alt+enter,添加定义

a、连接数据库
//localhost本地,远程就写远程的ipm_db.setHostName("localhost");
b、需要操作的数据库的名字 ,这个要添加到资源文件

注意不要使用添加文件的方式,因为db文件可能加不上

 m_db.setDatabaseName("F:\\Documents\\Desktop\\wangpan\\TcpServer\\cloud.db");
c、插入数据
insert into usrInfo(name, pwd) values ('jack', 'jack'), ('rose', 'rose'), ('lucy', 'lucy');

G、打开数据库

打开成功则输出数据库内容,失败则弹出Box提示打开数据库失败

if(m_db.open()){//成功——查询数据QSqlQuery query;query.exec("select * from usrInfo");while (query.next()) {QString data = QString("%1,%2,%3").arg(query.value(0).toString()).arg(query.value(1).toString()).arg(query.value(2).toString());qDebug()<<data;}}else {QMessageBox::critical(NULL,"打开数据库","打开数据库失败");}

H、调试

打开main.cpp

a、引入头文件
#include "operatedb.h"
OperateDB::getInstance().init();

main.cpp的完整代码 

#include "tcpserver.h"#include <QApplication>
#include "operatedb.h"
int main(int argc, char *argv[])
{QApplication a(argc, argv);//关于数据库的测试OperateDB::getInstance().init();//    TcpServer w;//    w.show();return a.exec();
}

3.3、析构函数

A、创建析构函数

~OperateDB();

B、关掉数据库

OperateDB::~OperateDB()
{//关掉数据库m_db.close();
}

3.3、运行测试

成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/285150.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频领域首个,阿里云推出华为鸿蒙 HarmonyOS NEXT 版音视频 SDK

近日&#xff0c;阿里云在官网音视频终端 SDK 栏目发布适配 HarmonyOS NEXT 的操作文档和 SDK&#xff0c;官宣 MediaBox 音视频终端 SDK 全面适配 HarmonyOS NEXT。 此外&#xff0c;阿里云播放器 SDK 也在华为开发者联盟官网鸿蒙生态伙伴 SDK 专区同步上线&#xff0c;面向所…

Linux系统——硬件命令

目录 一.网卡带宽 1.查看网卡速率——ethtool 网卡名 2.查看mac地址——ethtool -P 网卡名 二、内存相关 1.显示系统中内存使用情况——free -h 2.显示内存模块的详细信息——dmidecode -t memory 三、CPU相关 1.查看CPU架构信息——lscpu 2.性能模式 四、其他硬件命…

Java微服务分布式分库分表ShardingSphere - ShardingSphere-JDBC

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

个人博客系列-后端项目-系统角色配置(8)

系统角色配置需要设置的接口 用户可以绑定多个角色&#xff0c;角色对应有多个路由权限。用户绑定角色后&#xff0c;可以访问当前角色下的各个api路由和菜单路由。 用户注册时设置用户角色修改用户角色&#xff08;同时对应用户可以访问的路由将会同步变更&#xff09;添加修…

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案&#xff1a; 第一种方式是使用request模拟请求&#xff0c;并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器&#xff0c;selenium自动化操作无头浏览器&#xff0c;由无头浏览器实现请求&#xff0c;对得到的数据进行解析。 第一种方…

[Java基础揉碎]单例模式

目录 什么是设计模式 什么是单例模式 饿汉式与懒汉式 饿汉式vs懒汉式 懒汉式存在线程安全问题 什么是设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模式就像是经典的棋谱&am…

数据分析和机器学习库Pandas的使用

Pandas 库是一个免费、开源的第三方 Python 库&#xff0c;是 Python 数据分析和机器学习的工具之一。Pandas 提供了两种数据结构&#xff0c;分别是 Series&#xff08;一维数组结构&#xff09;与 DataFrame&#xff08;二维数组结构&#xff09;&#xff0c;极大地增强的了 …

STM32微控制器的中断优先级设置对系统性能有何影响?

STM32微控制器的中断优先级设置对系统性能有着显著的影响。正确配置中断优先级可以确保关键任务得到及时响应&#xff0c;提高系统的实时性和可靠性。相反&#xff0c;如果中断优先级设置不当&#xff0c;可能会导致系统响应延迟&#xff0c;甚至出现死锁等问题。本文将详细探讨…

边缘计算【智能+安全检测】系列教程-- Jeton Agx Orin 基础环境搭建

1 .前期准备 Jetson Agx Orin 比Jetson Agx Orin Xavier的算力要高&#xff0c;性能要好通常用来做自动驾驶的AI推理&#xff0c;具体外观如下图 1.刷机软件sdkmanager&#xff1a;下载链接 NVIDIA账号需要注册&#xff0c;正常一步一步往下走就行。在ubuntu18以上的系统安…

pycharm搭建新的解释器及删除处理

目录 1.创建虚拟环境 个人实际操作&#xff1a; 对于“继承全局站点包”&#xff1a; 2.创建一个新项目 3.删除操作 &#xff08;1&#xff09;删除解释器 &#xff08;2&#xff09;删除新建项目 1.创建虚拟环境 Pycharm官方文档说明网址&#xff1a; Configure a virt…

C语言 数组指针 指针数组

指针数组 什么是指针数组&#xff0c;他是一个数组&#xff0c;数组的元素是指针。但是指针也有多种数据类型&#xff0c;有数组指针、函数指针、整形指针、字符串指针。 现在我就使用函数指针来写代码&#xff0c;也就是函数指针数组的应用代码&#xff1a; #include <s…

Qt实现简易的多线程TCP服务器(支持多个客户端连接)附源码

目录 一.UI界面的设计 二.服务器的启动 三.实现自定义的TcpServer类 1.在widget中声明自定义TcpServer类的成员变量 2.在TcpServer的构造函数中对于我们声明的m_widget进行初始化&#xff0c;m_widget我们用于后续的显示消息等&#xff0c;说白了就是主界面的更新显示等 …

自注意力机制的理解

一、自注意力要解决什么问题 循环神经网络由于信息传递的容量以及梯度消失问题&#xff0c;只能建立短距离依赖关系。为了建立长距离的依赖关系&#xff0c;可以增加网络的层数或者使用全连接网络。但是全连接网络无法处理变长的输入序列&#xff0c;另外&#xff0c;不同的输…

计算机三级——网络技术(综合题第五题)

第一题 填写路由器RG的路由表项①至④。 目的网络&#xff0f;掩码长度输出端口输出端口172.19.63.192&#xff0f;30S0(直接连接)172.19.63.188&#xff0f;30S1(直接连接) 路由器RG的S0的IP地址是172.19.63.193&#xff0c;路由器RE的S0的IP地址是172.19.63.194。 【解析】…

ASP .Net Core 8.0 依赖注入的三种注入模式

&#x1f433;前言 &#x1f340;在.NET中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种设计模式&#xff0c;用于解耦组件之间的依赖关系。 依赖注入的核心思想是将对象的依赖关系&#xff08;即对象所需的其他服务或组件&#…

Cesium for UE-02-创建第一个关卡(Level),添加地形和地图及建筑物

继上一个章节后&#xff0c;本章节主要记录如何使用安装的Cesium for UE插件建立关卡。 先打开虚幻引擎 创建关卡场景 1. 打开我们上一个章节新建的项目&#xff0c;myapp02 登录cesium账号 打开项目后&#xff0c;可以看到左侧为插件页面 点击 Connect to Cesium ion按钮会在…

Neo4j桌面版导入CVS文件

之后会出来一个提示框&#xff0c;而且会跳出相关文件夹&#xff1a; 然后我们将CSV文件放在此目录下&#xff1a; 我们的relation.csv是这样的 参见&#xff1a; NEO4J的基本使用以及桌面版NEO4J Desktop导入CSV文件_neo4j desktop使用-CSDN博客

银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report

人民银行金融统计数据大集中自动化报送系统&#xff08;简称PBOC Report&#xff09;&#xff0c;是基于现代计算机网络技术应用基础上&#xff0c;由人行总行设置金融统计数据服务器&#xff0c;建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…

unity无法使用道路生成插件Road Architect(ctrl和shift无法标点)

切换一下布局就行了。 附&#xff1a;Road Architect教学地址

微服务(基础篇-003-Nacos)

目录 Nacos注册中心&#xff08;1&#xff09; 认识和安装Nacos&#xff08;1.1&#xff09; Nacos快速入门&#xff08;1.2&#xff09; 服务注册到Nacos(1.2.1) Nacos服务分级存储模型&#xff08;1.3&#xff09; 配置集群&#xff08;1.3.1&#xff09; 根据集群修改…