qt连接mysql8

环境

qt 5.14.2
mysql 8在远程服务器上
mysql的高版本和部署位置是与其他教程最大的不同点,mysql是在linux服务器上运行的,因此按照其他教程配置时出现了一些问题

参考文档

主要参考教程1
主要参考教程2
主要流程
其实就是 手动编译驱动

过程可按此教程进行,下面仅强调几点不同之处

问题

服务器上通过apt安装的mysql的架构是?

dpkg -l |grep mysql //列出服务器已安装的mysql相关软件,获取到包名
dpkg -s mysql-community-server //通过包名查看mysql-community-server的详细信息,可以看到Architecture: amd64,表明是64位的
dpkg -L   xxx//通过包名查询系统中已安装的软件包所安装的位置

编译qt的sql驱动所需的mysql.h等头文件文件

mysql.h相关的文件

  • 法一
    如果通过 whereis mysql.h 无法找到,说明装MySQL时只是安装了MySQL的服务器和MySQL的客户端,没有安装MySQL database development files
    sudo apt-get install libmysqlclient-dev //在服务器上执行,安装开发文件
    之后可以 whereis mysql.h 命令找到这个目录/usr/include/mysql,把此目录中所有文件(一个文件夹和一堆头文件)均下载到本地,并将保存到的本地目录添加到.pro文件中
    INCLUDEPATH+="刚下载下来的位置"
  • 法二(推荐)
    完整包,下载Windows (x86, 64-bit), ZIP Archive
    把解压后的mysql-8.0.25-winx64\mysql-8.0.25-winx64\include的目录加入到.pro文件中
    INCLUDEPATH+="…\include\"

MySql各语言的connector lib,dll文件,我们需要c和c++部分

libmysql.lib文件,需要下载完整包,不要单独下,单独下的版本很老,不兼容现在的mysql8
C++,下载Windows (x86, 64-bit), ZIP Archive
把lib64中的四个dll复制到qt的bin目录中
完整包,下载Windows (x86, 64-bit), ZIP Archive
刚才如果下过就直接找lib目录下的libmysql.dll libmysql.lib两个文件,复制到qt的bin目录中。

注意,编译qt的mysql驱动需要libmysql.lib
在.pro文件中增加这个lib的路径
LIBS+="..\libmysql.lib"

踩得坑下载此链接中的C++部分,c部分很老不要下载,需要找到完整包取出

官方提示

Qt 编译mysql驱动时提示“无法找到执行文档,请指定一个”的解决方法

请点击构建项目就行了,而不是绿色的三角(构建+运行)。编译出来的就不是让你直接运行的。

QSqlDatabase: QMYSQL driver not loaded

编译完驱动,放完c的两个lib仍提示如此,需要新加入c++的四个lib库到qt的bin目录中。见前面的问题。

qt工程中如何使用mysql?

XXXX.pro文件中添加sql
QT += core gui sql

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

    #include <QApplication>
    #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();
    }

附赠,linux下使用libmysql++库操作mysql的C API(我没尝试!)

https://blog.csdn.net/Junkie0901/article/details/17100377