mac系统下QT连接MySQL数据库连接不上的解决方法
Qt下载官网 http://download.qt.io/archive/qt/
mysql下载官网 https://downloads.mysql.com/archives/community/
我也是弄了好几天,才解决,接下来分享一下:
1.首先下载QT版本,我是用的5.12.0这个版本,安装的时候组件选择一定要选择Source文件。
2.安装MySQL:
(1)选择你对应的MAC系统进行下载,选择版本。
(2)下载完后安装,我这儿呢选择的是(use legacy password encryption),下一步(next)。
(3)设置密码,这儿用户名是“root",输入框中是你连接数据库时输入的密码,必须8位以上,设置好后点击完成,在你的系统偏好设置就能看到MySQL。
(4)点击configuration能看到数据存放的文件夹,/usr/local/mysql路径需要在访达界面上按住command+shift+g,点击/usr/local里面去找mysql文件夹。
(5)连接数据库,在终端输入 mysql -u root -p,如果提示输入密码能打开就不用配置环境变量,否者还需要配置环境变量。
环境变量配置:/Users/xxx(用户文件夹),按command+shift+.可以显示隐藏,找到.zshrc这个文件,右键用文本编辑打开,里面输入 export PATH=${PATH}:/usr/local/mysql/bin 保存,接下来就可以在终端打开MySQL。
mysql> create database db1;
我这儿创建了一个db1的数据库
3.终端里面看是否有qmake,没有就安装,参考这位大神的文章(添加链接描述),环境变量配置:/Users/xxx(用户文件夹),按command+shift+.可以显示隐藏,找到.zshrc这个文件,右键用文本编辑打开,里面输入 :
export QTDIR=/Users/用户名/Qt5.12.0/5.12.0/clang_64 (重要:这儿换成你QT安装的路径)
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH=$QTDIR/bin:$PATH
然后保存,这下在终端里面输入qmake -v,会显示qmake的版本号。
4.用终端打开你QT的sqldrivers文件夹的位置,输入:
cd /Users/用户名/Qt5.12.0/5.12.0/clang_64/plugins/sqldrivers
回车后定位到sqldrivers这个文件夹,输入:ls
回车后查看是否有 libqsqlmysql.dylib 这个文件,正常情况下是有这个文件的。然后输入:
otool -L libqsqlmysql.dylib 终端显示如下图:
找到蓝色标记处,有一个 libmysqlclient.20.dylib这个文件,这个文件是QT驱动连接的文件,我们安装的MySQL数据库的文件是 libmysqlclient.21.dylib,将21改成20就可以了。
去这个路径下 /usr/local/mysql-8.0.28-macos11-x86_64/lib/ 将你的 libmysqlclient.21.dylib改成终端显示的 libmysqlclient.20.dylib(/usr/local/mysql/lib/. 路径需要在访达界面上按住command+shift+g,点击/usr/local里面去找mysql文件夹)
5.新建一个QT项目,在pro文件里面添加QT += sql,添加完记得构建或者保存一下。
#include "widget.h"
#include "ui_widget.h"
//#include<QLabel>
#include <QSqlDatabase>
#include<QSqlQuery>
#include<QSqlQueryModel>
#include<QSqlError>
#include<QDebug>
#include<QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//QT的数据库驱动
qDebug()<<QSqlDatabase::drivers();
//获取数据库对象
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("11111111");
db.setDatabaseName("db1");
if(db.open()==false)
{
QMessageBox::warning(this,"失败",db.lastError().text());
return;
}
else {
ui->label->setText("MYSQL数据库连接上了");
}
}
Widget::~Widget()
{
delete ui;
}
运行后如果没有警告就表示连接成功了,接下来就可以进行数据库开发了。
这也是我在学习中遇到的问题,记录下来分享给更多的人。