环境
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();
}