网盘——数据库操作

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

数据库是在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、运行测试

成功

相关推荐
api_1800790546015 分钟前
异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎
大数据·开发语言·数据库·数据挖掘·node.js
怕什么真理无穷31 分钟前
mysql server 9.4 windows安装教程(sqlyog 下载)
数据库
Olrookie37 分钟前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
数据库生产实战1 小时前
ORACLE 19C ADG环境 如何快速删除1.8TB的分区表?有哪些注意事项?
数据库·oracle
blackorbird1 小时前
使用 Overpass Turbo 查找监控摄像头
运维·服务器·数据库·windows
IT永勇1 小时前
SQLite数据库基本操作
数据库·sqlite·嵌入式开发·增删改查·关系型数据库
洋不写bug1 小时前
数据库的创建,查看,修改,删除,字符集编码和校验操作
android·数据库·adb
想ai抽1 小时前
吃透大数据算法-算法地图(备用)
大数据·数据库·spark
weixin_307779131 小时前
Clickhouse导出库的表、视图、用户和角色定义的SQL语句
开发语言·数据库·算法·clickhouse·自动化
流星白龙2 小时前
【Qt】7.信号和槽_connect函数用法(1)
开发语言·数据库·qt