Linux下的QT对MySQL数据库操作(超详细)

1.开发环境

Ubuntu 18+QT5

2.安装配置MySQL

  1. 使用apt安装mysql
sudo apt-get update		//更新软件库
sudo apt-get install mysql-server	//安装MySQL服务器
sudo apt-get install mysql-client	//安装MySQL客户端
  1. 启动 MySQL 服务
sudo service mysql start	//启动MySQL服务
service mysql status		//查看MySQL服务状态

在这里插入图片描述

可以看到MySQL服务器启动成功

  1. 配置MySQL数据库

MySQL 在安装后提供了一个安全性脚本,用于加固数据库系统。

sudo mysql_secure_installation

设置 root 用户的密码、删除匿名用户、禁止 root 远程登录等。按照提示进行设置。

如进行以上设置可使用mysql -u root -p登录到MySQL

CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'localhost';
FLUSH PRIVILEGES;			//创建用户以及设置密码(可不创建,默认使用root登录)
  1. 重置MySQL密码
sudo mysql -u root	//无密码登录到MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
FLUSH PRIVILEGES;
exit;		//默认是高强度密码

如若设置低强度密码,可按如下操作进行

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
//在配置文件中找到包含 [mysqld] 的部分,并在其下添加以下行:
[mysqld]
validate-password=LOW
//保存并重启MySQL服务
sudo service mysql restart

在这里插入图片描述

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
exit;			//更改root弱密码(若未进行安全性设置,可直接修改为弱密码,无需修改配置文件)
  1. 安装配置完成

在这里插入图片描述

3.安装图形化MySQL管理软件navicat

  1. 下载navicat

    Linux版本

如若需要下载其他版本,将链接后的数字更改即可
在这里插入图片描述

  1. 安装navicat
//下载目录打开终端
sudo chmod +x navicat16-mysql-cs.AppImage //赋予可执行权
./navicat16-mysql-cs.AppImage 			  //启动
  1. navicat连接MySQL
    在这里插入图片描述在这里插入图片描述

测试连接成功

  1. 建立数据库
    在这里插入图片描述建立表并输入数据
    在这里插入图片描述在这里插入图片描述

4.QT连接MySQL数据库

由于在QT5的版本中移除了MySQL数据库驱动libqsqlmysql.so,因此我们需要使用qmake对QT源码进行重新编译以生成libqsqlmysql.so

1.下载QT源码文件

  1. QT源码在安装QT时即可下载
    在这里插入图片描述

2.查看QT当前支持数据库驱动

//demo.pro
QT += sql	//pro文件引入sql

//widget.h
#include <QtSql>

//main.cpp
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

	qDebug() << QSqlDatabase::drivers();//支持驱动
	
    // 手动加载MySQL驱动程序
    if (!QSqlDatabase::isDriverAvailable("QMYSQL")) {
        qDebug() << "MySQL driver not available";
        return -1;
    }

    // 设置数据库连接参数
    db.setHostName("127.0.0.1");
    db.setDatabaseName("demo");
    db.setUserName("root");
    db.setPassword("123456");

    // 尝试连接数据库
    if (db.open()) {
        qDebug() << "Connected to database";
        // 执行数据库操作
    } else {
        qDebug() << "Failed to connect to database:" << db.lastError().text();
        // 错误处理
    }

报错

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQ	
("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
//可以发现当前并不支持MySQL

//在QT数据库驱动文件夹中
tj@ubuntu:~/Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers$ pwd
/home/tj/Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers
tj@ubuntu:~/Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers$ ls
libqsqlite.so  libqsqlodbc.so  libqsqlpsql.so
//可以发现缺少libqsqlmysql.so,因此源码编译生成此文件后复制到该目录即可解决问题!

3.源码编译(qmake)MySQL驱动文件

  1. 进入QT安装目录Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers
tj@ubuntu:~/Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers$ ls
libqsqlite.so  libqsqlodbc.so  libqsqlpsql.so	//当前没有libqsqlmysql.so动态库文件
  1. 安装MySQL的开发库
sudo apt-get install libmysqlclient-dev
  1. 进入到QT源码中MySQL的文件路径中
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ pwd
/home/tj/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ ls
main.cpp  mysql.json  mysql.pro  qsql_mysql.cpp  qsql_mysql_p.h  README
  1. 定位编译所需库文件
:~$ sudo find / -name mysql.h 2>/dev/null
/usr/include/mysql/mysql.h

:~$ locate libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.29
  1. 配置编译文件(mysql.pro)
:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ vim mysql.pro //修改如下并保存退出(wq)

在这里插入图片描述

  1. 编译
//上级目录
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ cd ..		//退回到上一级
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers$ /home/tj/Qt5.12.8/5.12.8/gcc_64/bin/qmake  //执行qmake
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers$ make	//编译源码

//进入mysql目录再次编译
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers$ cd mysql/
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ /home/tj/Qt5.12.8/5.12.8/gcc_64/bin/qmake 
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ make


//查看生成的libqsqlmysql.so文件
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ pwd
/home/tj/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ ls
libqsqlite.so  libqsqlite.so.debug  libqsqlmysql.so  libqsqlmysql.so.debug

上述步骤一定注意路径,对应于自己的QT安装路径,步骤较繁琐

4.生成libqsqlmysql.so文件

  1. 将上述步骤中生成的文件复制到QT的数据库驱动支持文件夹里(Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers
tj@ubuntu:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ cp libqsqlmysql.so /home/tj/Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers/

在这里插入图片描述

可以看到Qt5.12.8/5.12.8/gcc_64/plugins/sqldrivers中已经存在有效的MySQL驱动程序库文件

5.测试QT连接MySQL数据库

  1. 创建测试项目
qDebug() << QSqlDatabase::drivers();
//再次查看QT支持的数据库驱动,可以看到已经支持MySQL了!
("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
//测试数据库连接
 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

//    qDebug() << QSqlDatabase::drivers();

//     手动加载MySQL驱动程序
//    if (!QSqlDatabase::isDriverAvailable("QMYSQL")) {
//        qDebug() << "MySQL driver not available";
//        return -1;
//    }

    // 设置数据库连接参数
    db.setHostName("127.0.0.1");
    db.setDatabaseName("demo");
    db.setUserName("root");
    db.setPassword("123456");

    // 尝试连接数据库
    if (db.open()) {
        qDebug() << "Connected to database"; 
    } else {
        qDebug() << "Failed to connect to database:" << db.lastError().text();
        // 错误处理
    }


    QSqlQuery query;
    query.exec("SELECT * FROM student");
    while (query.next()) {
        QString value = query.value(0).toString();
        // 处理查询结果
        qDebug() << value;
    }
    db.close(); //关闭数据库

输出:
在这里插入图片描述

以上成功连接数据库并执行SQL成功!