数据库操作

  1. 定义数据库操作类
  2. 将数据库操作类定义为单例
  3. 数据库相应操作

数据库连接

在Server端创建C++类DBOperate,注意要继承于QObject为了能够支持信号槽。

Untitled

dboperate.h

#ifndef DBOPERATE_H
#define DBOPERATE_H

#include <QObject>
#include <QSqlDatabase> // 连接数据库
#include <QSqlQuery> // 数据库操作

class DBOperate : public QObject
{
    Q_OBJECT
public:
    explicit DBOperate(QObject *parent = nullptr);
    static DBOperate& getInstance(); // 公用获取引用,实现单例模式
    void init(); // 初始化函数,数据库连接
    ~DBOperate(); // 析构函数,关闭数据库连接
signals:

public slots:
private:
    QSqlDatabase m_db; // 连接数据库

};

#endif // DBOPERATE_H

dboperate.cpp

#include "dboperate.h"
#include <QMessageBox>
#include <QDebug>

DBOperate::DBOperate(QObject *parent) : QObject(parent)
{
    // 连接数据库
    m_db = QSqlDatabase::addDatabase("QMYSQL"); // 连接的数据库类型

}

DBOperate &DBOperate::getInstance()
{
    static DBOperate instance;
    return instance;
}

// 数据库连接
void DBOperate::init()
{
    m_db.setHostName("localhost");         // 数据库服务器IP
    m_db.setUserName("root");              // 数据库用户名
    m_db.setPassword("root");              // 数据库密码
    m_db.setDatabaseName("networkdiskdb"); // 数据库名
    if(m_db.open()) // 数据库是否打开成功
    {
        QSqlQuery query;
        query.exec("select * from userInfo");
        while(query.next())
        {
            QString data = QString("%1, %2, %3, %4").arg(query.value(0).toString()).arg(query.value(1).toString())
                    .arg(query.value(2).toString()).arg(query.value(3).toString());
            qDebug() << data;
        }
    }
    else
    {
        QMessageBox::critical(NULL, "数据库打开", "数据库打开失败");
    }
}

DBOperate::~DBOperate()
{
    m_db.close(); // 关闭数据库连接
}

常见报错:QSqlDatabase: QMYSQL driver not loaded

参考解决方案:

QT连接mysql问题解决:QSqlDatabase: QMYSQL driver not loaded_程序白痴的博客-CSDN博客_qt连接mysql数据库时提示无驱动怎么解决

QSqlDatabase QMYSQL driver not loaded_白菜侠的博客-CSDN博客

登录注册注销请求

  1. 规定消息类型
  2. 界面设计
  3. 注册,用户名唯一,防止重复注册