QT5连接并操作远程服务器MySQL数据库

QT5连接并操作远程服务器MySQL数据库

一、连接MYSQL数据库

QT连接远程服务器MySQL数据库,步骤如下:

0.加入MySQL动态链接库

首先在QT的安装目录下的bin文件夹下,加入libmysql.dll动态链接库,否则编译运行会输出MySQL驱动加载失败的错误!!

具体参考网上的教程,不一定需要安装MySQL,加入动态链接库即可,亲测!

加载链接库的可以随便参考一篇:Qt5.12连接MySQl5.7(亲自测试成功)

1.加入sql模块,包含头文件

双击pro文件,加入sql模块

image-20200807115701378

使用当数据库相关内容时,加入头文件,主要有以下几个头文件:

#include <QSqlDatabase> //sql驱动基础
#include <QSqlQuery>//sql查询相关
#include <QSqlError>//sql输出错误

使用#include 可以输出错误进行检查,看看哪里出了问题,使用lastError()方法即可输出错误信息,例如:

image-20200807153110046

2.远程连接方法

主要代码如下:

#include "widget.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    //主要方法
    QSqlDatabase data_base = QSqlDatabase::addDatabase("QMYSQL");//添加驱动
    data_base.setHostName("120.25.248.91");  //设置主机地址
    data_base.setPort(3306);  //mysql设置端口
    data_base.setDatabaseName("xxx");  //设置数据库名称
    data_base.setUserName("root");  //设置用户名
    data_base.setPassword("xxx");  //设置密码
    if(!data_base.open())//打开数据库
    {
        qDebug()<<"connect failed";
        qDebug() << data_base.lastError();//.databaseText()  输出错误信息
    }
    else
        qDebug()<<"success";
    database.close();//关闭数据库
    return a.exec();
}

3.连接错误Error2003解决办法

QSqlError(“2003”, “QMYSQL: Unable to connect”, “Can’t connect to MySQL server on ‘120.25.248.91’ ,(10061)”)

QSqlError("2003", "QMYSQL: Unable to connect", "Can't connect to MySQL server on '120.25.248.91' ,(10061)")

报出上面的错误时,非常无语。。。

检查了数据库用户名、密码、数据库名、端口等等都没错,默认使用的3306也是开放的。。

然后重启了一下服务器上的mysql,

systemctl restart mysql.service

竟然搞定了!!

二、QT操作MySQL

1.包含头文件

需要包含下面这些头文件,里面有数据库操作的方法。

#include <QSqlQuery> 
#include <QSqlQueryModel>
#include <QSqlTableMode>

头文件说明如下:

转自:https://blog.csdn.net/kangshuaibing/article/details/84972681

  • QSqlQuery

    可以用来执行SQL语句和获得执行结果的。

  • QSqlQueryModel

    提供了一个sql查询结果的只读数据模型。它从查询QSqlQueryModel获取数据。

    可以方便的用于在QListView, QTableView, QTreeView等各种view上展示数据。

    但它是只读的,不能编辑。

  • QSqlTableMode

    继承于QSqlQueryModel,与QSqlQueryModel功能相似。

    比QSqlQueryModel的限制在于不能是任意sql语句,只是对单个数据表操作。

    拓展在于在各种view上展示表格数据的同时,还允许用户进行编辑操作。

2.操作示例

先上效果图:

实现思路:

首先,在服务器MySQL数据库中创建测试用到的数据库与数据表,如:

image-20200808145614840

在当前页面连接MySQL数据库,在注册按钮的槽函数中,查询当前需要注册的账号是否存在,不存在就注册,存在则进行提示。

在登录按钮槽函数中,查询用户密码,查询正确即可登录。

主要代码:

注册按钮槽函数:

image-20200808145947586

登录按钮槽函数:

image-20200808145905782

#include "widget.h"
#include "ui_widget.h"
#include "ctrl.h"
#include <Qstring>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QMessageBox>
#include <QSqlTableModel>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  //加入MYSQL的数据库驱动
    db.setHostName("120.25.248.91");         //主机名
    db.setPort(3306);                    //端口
    db.setUserName("root");              //用户名
    db.setPassword("mysql");            //密码
    db.setDatabaseName("Door");          //数据库名

    //测试连接
    if(!db.open())//打开数据库
    {
      qDebug()<<"can not connec";
      qDebug() << db.lastError();//打印错误信息
    }
    else
    {
       qDebug()<<"connect success";
    }
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_loginBt_clicked()//登录按钮槽函数
{
    QString userName = ui->userEdit->text();
    QString password = ui->passwdEdit->text();

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("softuserTable");
    model->setFilter(QString("userName='%1'").arg(userName));//查询用户名
    model->select();

    int row = model->rowCount();
    if(row>0){//查询成功
        row=0;
        model->setFilter(QString("userName='%1' and password='%2'").arg(userName).arg(password));//查询用户与密码
        model->select();
        row = model->rowCount();
        if(row>0){//查询成功
            qDebug()<< "登录成功";
            QMessageBox::information(this,"提示","登录成功!");
        }else{
            QMessageBox::information(this,"提示","密码错误,登录失败!");
            ui->passwdEdit->clear();
        }
    }else{//查询失败
        QMessageBox::information(this,"提示","用户未注册!");
    }

    delete model;
}


void Widget::on_registerBt_clicked()//注册按钮槽函数
{
    QString user = ui->userEdit->text();
    QString pswd = ui->passwdEdit->text();

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("softuserTable");//选择数据表
    model->setFilter(QString("userName='%1'").arg(user));//设置查询过滤选项,此处查询用户名
    model->select();//获取查询数据

    int row = model->rowCount();
    if(row>0){//查询到用户名已在数据库中
        QMessageBox::information(this,"提示","用户已注册!");
    }else{
        QString cmd = QString("insert into softuserTable(userName,password) values ('%1','%2')")
                .arg(user).arg(pswd);
        qDebug() << "cmd = " << cmd ;
        QSqlQuery *query = new QSqlQuery;

        if(query->exec(cmd)){
            QMessageBox::information(this,"提示","注册成功!");
        }else{
            QMessageBox::information(this,"提示","注册失败!请联系管理员");
        }
        delete query;
        ui->passwdEdit->clear();//清除密码输入框
    }

}

 if(query->exec(cmd)){
            QMessageBox::information(this,"提示","注册成功!");
        }else{
            QMessageBox::information(this,"提示","注册失败!请联系管理员");
        }
        delete query;
        ui->passwdEdit->clear();//清除密码输入框
    }

}
  • 6
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值