Linux下的QT对MySQL数据库操作(超详细)
由于在QT5的版本中移除了MySQL数据库驱动libqsqlmysql.so,因此我们需要使用qmake对QT源码进行重新编译以生成libqsqlmysql.so。设置 root 用户的密码、删除匿名用户、禁止 root 远程登录等。如进行以上设置可使用mysql -u root -p登录到MySQL。MySQL 在安装后提供了一个安全性脚本,用于加固数据库系统。上述步骤一定注意路径,对应于自己的
·
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
如若需要下载其他版本,将链接后的数字更改即可
- 安装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成功!
更多推荐
已为社区贡献1条内容
所有评论(0)