网盘——数据库操作

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

数据库是在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、需要操作的数据库的名字 ,这个要添加到资源文件](#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、在数据库下面创建信息表:用户信息表,好友表

sql 复制代码
create table usrInfo(id integer primary key autoincrement,  name varchar(32) unique,pwd varchar(32));

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

sql 复制代码
alter table usrInfo add online integer default 0

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

sql 复制代码
create table friend(id integer, friendId integer, primary key(id, friendId));

1.6、查看创建表格

sql 复制代码
.tables

1.7、退出来

sql 复制代码
.quit

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

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

2、定义数据库操作类

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

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

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

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

3.1、定义单例

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

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

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

sql 复制代码
static OperateDB& getInstance();

B、通过类名直接来调用

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

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

3.2、连接数据库

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

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

sql 复制代码
#include <QtSql/QSqlDatabase>

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

sql 复制代码
#include <QtSql/QSqlQuery>

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

sql 复制代码
private:
    QSqlDatabase m_db;

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

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

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

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

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

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

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

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

G、打开数据库

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

sql 复制代码
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、引入头文件
sql 复制代码
#include "operatedb.h"
sql 复制代码
OperateDB::getInstance().init();

main.cpp的完整代码

sql 复制代码
#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、创建析构函数

sql 复制代码
~OperateDB();

B、关掉数据库

sql 复制代码
OperateDB::~OperateDB()
{
    //关掉数据库
    m_db.close();
}

3.3、运行测试

成功

相关推荐
hummhumm14 分钟前
Oracle 第29章:Oracle数据库未来展望
java·开发语言·数据库·python·sql·oracle·database
gavin_gxh40 分钟前
ORACLE 删除archivelog日志
数据库·oracle
一叶飘零_sweeeet43 分钟前
MongoDB 基础与应用
数据库·mongodb
猿小喵1 小时前
DBA之路,始于足下
数据库·dba
tyler_download1 小时前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
weixin_449310842 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
Cachel wood2 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
standxy2 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
Narutolxy4 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill4 小时前
安装和卸载Mysql(压缩版)
数据库·mysql