【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(一、编译连接前准备)

2021/02/08 07:44
阅读数 176

写在最前面的话:

自己想做一个英语单词记录软件,可以在手机上和电脑上进行记录和查看,所以自己决定利用腾讯云数据库云加校园活动很棒,不是打广告哈),然后自己准备利用qt编写上位机软件。首先自己是在腾讯云上购买了云数据库,然后利用腾讯云的数据库管理的软件测试新建了数据库。然后准备用远程控制云数据库,首先测试了Nvicat Premium连接腾讯云数据库,发现可以用电脑上的软件控制数据库,然后准备用代码控制,首先用的是的python连接腾讯云数据库,发现可以控制,其实可以用python GUI来写上位机,但是没有找到python写安卓软件的库,所以再采用qt写上位机

然后自己用qt后第一步也是准备找到mysql的库,发现qt(5.13.2与5.14.1版本)竟然不带mysql的驱动,最难的事就来了,如何装上mysql的驱动?百度了各种文档后发现需要mysql安装包的各种文件,然后再利用qt带的源码自己编译驱动,说干就干,去年12月的时候自己在学校(目前还是大学生)尝试了一番,最后失败了。放了寒假回到家没有什么事又想接着尝试一番,最终经过一个晚上和一个下午的尝试最后成功用qt连接上了云数据库。主要是先用Nvicat连接本地的mysql数据库,成功连接后尝试用qt连接,然后成功之后再连接云数据库。

一、说明

电脑系统:win10

qt版本:5.13.2和5.14.1(测试均成功)

mysql版本:MySQL-5.5

本篇教程分为三个部分:

  1. 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(一、编译连接前准备)
  2. 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(二、编译连接)
  3. 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(三、问题整理)

本文参考链接(感谢各位大佬分享):

  1. 32位mysql安装包_数据分析入门:如何下载安装MySQL数据库?
  2. Windows 环境下使用 Qt 连接 MySQL
  3. Qt连接MySql驱动加载失败问题解决方法
  4. Qt-解决Qt与MySQL连接过程中出现“QSqlDatabase: QMYSQL driver not loaded”问题
  5. 「绝对独家」Qt5.14.1 如何编译和使用mysql和mariadb数据库驱动
  6. qt5.12.3及以上高版本(qt5.13.0,qt5.13.1)如何连接操作mysql/mariadb数据库
  7. Qt报错“QSqlDatabase: QMYSQL driver not loaded“的解决方案

我写过的两篇文章(建议连接前先看看):

  1. Nvicat Premium连接腾讯云数据库
  2. python连接腾讯云数据库

二、软件安装

本文用的mysql5.5以及qt5.13.2、5.14.1两个版本qt均测试成功,需要注意的是qt和mysql两个版本需要对应,如果mysql是32位的则需要qt也是32位,mysql64位需要qt也是64位。我百度发现我的qt是32位所以我下载的是32位的mysql,后续操作我发现其实只需要qt的MinGW和mysql对应即可,qt中的MinGW有64位和32位的,所以只要查看你的mysql是多少位的即可。我用的是32位的。

1.安装qt

可以自行百度,安装时建议安装全部组件,并且安装在C盘以外的其他盘

2.安装mysql

安装32位的可以借助下述文章,64位的需要自行百度,安装也不需要安装在c盘。最后配置完要知道自己root用户的密码,最好再新建一个数据库然后建立一个测试表进行测试。参考文章:32位mysql安装包_数据分析入门:如何下载安装MySQL数据库?

3.安装Nvicat(推荐)

可以安装Nvicat方便安装mysql后测试安装是否成功。

三、连接代码

先上代码,大家可以测试一下是不是可以成功连接,若是成功,则不需要后续编译驱动的过程。

XXXX.pro文件

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    mainwindow.cpp
HEADERS += \
    mainwindow.h
FORMS += \
    mainwindow.ui

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

main.cpp文件(注意这个需要改成自己数据库的各种设置)

#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QtDebug>
void connect_mysql()
{
       QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("127.0.0.1");      //连接数据库主机名,这里需要注意(若填的为”127.0.0.1“,出现不能连接,则改为localhost)
       db.setPort(3306);                 //连接数据库端口号,与设置一致
        db.setDatabaseName("money");      //连接数据库名,与设置一致
        db.setUserName("root");          //数据库用户名,与设置一致
        db.setPassword("123456");    //数据库密码,与设置一致
        qDebug()<<"开始连接";
        db.open();
        if(!db.open())
        {
            qDebug()<<"不能连接"<<"connect to mysql error"<<db.lastError().text();
            return ;
        }
        else
        {
             qDebug()<<"连接成功"<<"connect to mysql OK";
        }
        QSqlQuery query(db);
        //这是自己的表的名字,下面操作是打印出test表name一列的所有数据
        query.exec("select * from test");
        while(query.next()){
            qDebug()<<query.value("name").toString();
        }
}
int main(int argc,char *argv[])
{
    QCoreApplication a(argc,argv);
    connect_mysql();
    return a.exec();
}

mainwindow.ui文件(无任何改动)

后续编译部分见第二篇文章:【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(二、编译连接)

转载参考分享此篇文章请注明出处!

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部