1.开发环境
Ubuntu 18+QT5
2.安装配置MySQL
- 使用apt安装mysql
sudo apt-get update //更新软件库 sudo apt-get install mysql-server //安装MySQL服务器 sudo apt-get install mysql-client //安装MySQL客户端
- 启动 MySQL 服务
sudo service mysql start //启动MySQL服务 service mysql status //查看MySQL服务状态
可以看到MySQL服务器启动成功
- 配置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登录)
- 重置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弱密码(若未进行安全性设置,可直接修改为弱密码,无需修改配置文件)
- 安装配置完成
3.安装图形化MySQL管理软件navicat
-
下载navicat
Linux版本
如若需要下载其他版本,将链接后的数字更改即可
- 安装navicat
//下载目录打开终端 sudo chmod +x navicat16-mysql-cs.AppImage //赋予可执行权 ./navicat16-mysql-cs.AppImage //启动
- navicat连接MySQL
测试连接成功
- 建立数据库
建立表并输入数据
4.QT连接MySQL数据库
由于在QT5的版本中移除了MySQL数据库驱动libqsqlmysql.so,因此我们需要使用qmake对QT源码进行重新编译以生成libqsqlmysql.so
1.下载QT源码文件
- 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驱动文件
- 进入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动态库文件
- 安装MySQL的开发库
sudo apt-get install libmysqlclient-dev
- 进入到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
- 定位编译所需库文件
:~$ 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
- 配置编译文件(mysql.pro)
:~/Qt5.12.8/5.12.8/Src/qtbase/src/plugins/sqldrivers/mysql$ vim mysql.pro //修改如下并保存退出(wq)
- 编译
//上级目录 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文件
- 将上述步骤中生成的文件复制到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数据库
- 创建测试项目
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成功!