天天看点

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

本文所使用的是MSVC 2017 下进行编译生成的mysql的dll驱动

在第三次更新中使用的是MinGW 64 编译的,操作和MSVC类似,只需替换一个文件即可。MSVC 2017生成的plugin驱动可直接下载。

1.下载mysql 5.7.30 winx64

Mysql 5.7.30 winx64

本文安装目录为 D:\mysql-5.7.30-winx64

2.下载Qt 5.14.2

Qt 5.14.2

本文安装目录为 D:\Qt5.14.2

安装的时候记得选择source 以及 msvc 2017 x64的版本(本文基于此版本进行编译的,其他版本请自行选择)

3.添加系统环境变量

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库
qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库
qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

4.编译mysql项目工程

工程目录为:D:\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql

使用qt5.14.2 打开此目录中 .pro项目文件,在打开工程后修改pro中的代码

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h

SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin

include(../qsqldriverbase.pri)

INCLUDEPATH += "D:/mysql-5.7.30-winx64/mysql-5.7.30-winx64/include"

DEPENDPATH += "D:/mysql-5.7.30-winx64/mysql-5.7.30-winx64/include"

LIBS += "D:/mysql-5.7.30-winx64/mysql-5.7.30-winx64/lib/libmysql.lib"

5. 在编译之后打开D:\plugins\sqldrivers 文件夹发现所生成的驱动文件,并复制下方选中的文件并拷贝至

D:\Qt5.14.2\5.14.2\msvc2017_64\plugins\sqldrivers

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

拷贝后的文件目录如下图所示

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

5.复制 D:\mysql-5.7.30-winx64\mysql-5.7.30-winx64\lib 此目录下的两个文件如下图所示

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

拷贝至如下目录 D:\Qt5.14.2\5.14.2\msvc2017_64\bin

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

6. 在mysql中创立测试用的数据库 并建任意表,如下图所示

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

7. 在QT中新建一个widget工程,测试代码如下,

7.1 首先在pro中添加

QT += sql

7.2 并引用相应的头文件

#include

7.3 在main中或widget中添加如下代码进行测试

qDebug()<

QStringList drivers = QSqlDatabase::drivers();

foreach(QString driver, drivers)

qDebug()<

QSqlDatabase data_base = QSqlDatabase::addDatabase("QMYSQL");

data_base.setHostName("127.0.0.1"); //设置主机地址

data_base.setPort(3306); //设置端口 默认3306

data_base.setDatabaseName("sql5user"); //设置数据库名称

data_base.setUserName("root"); //对应数据库的用户名

data_base.setPassword("123456");//对应数据库的密码

if(!data_base.open())

qDebug()<

else

qDebug()<

7.4 程序输出效果如下图所示

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

第一次更新

在使用qt连接阿里云服务器mysql5.28的时候,应该注意的是

应该存在指定的数据库表名

检查数据库中所授权的用户名,通常默认情况下root 的 host 为“localhost”,故此,需要授权一个用户进行访问,使你的host 变为"%"即可

默认情况下,新授权的访问用户是没权限的,所以应该赋予权限给新添加的用户

先查询所授权的ip,authentication_string指的是 password(5.7的原因)

SELECT host,user,authentication_string,Grant_priv,Super_priv FROM mysql.user;

再使用如下语句进行权限的更改,代码中xxxx指的是用户的username,

(在出现ERROR:1142 即权限被拒绝的时候需执行如下语句,同时刷新mysql, 重启mysql即可解决)

UPDATE mysql.user SET

`Select_priv` = 'Y',

`Insert_priv` = 'Y',

`Update_priv` = 'Y',

`Delete_priv` = 'Y',

`Create_priv` = 'Y',

`Drop_priv` = 'Y',

`Reload_priv` = 'Y',

`Shutdown_priv` = 'Y',

`Process_priv` = 'Y',

`File_priv` = 'Y',

`Grant_priv` = 'Y',

`References_priv` = 'Y',

`Index_priv` = 'Y',

`Alter_priv` = 'Y',

`Show_db_priv` = 'Y',

`Super_priv` = 'Y',

`Create_tmp_table_priv` = 'Y',

`Lock_tables_priv` = 'Y',

`Execute_priv` = 'Y',

`Repl_slave_priv` = 'Y',

`Repl_client_priv` = 'Y',

`Create_view_priv` = 'Y',

`Show_view_priv` = 'Y',

`Create_routine_priv` = 'Y',

`Alter_routine_priv` = 'Y',

`Create_user_priv` = 'Y',

`Event_priv` = 'Y',

`Trigger_priv` = 'Y',

`Create_tablespace_priv` = 'Y'

WHERE User='xxx';

在qt中运行数据库语句的格式为

#include

#include

QSqlQuery SqlQuery;

SqlQuery.exec(" 在这里插入你的sql语句"); //若能保证正确执行,只使用这句即可,否则使用下方的语句进行判断即可

if(!SqlQuery.exec("在这里插入你的sql语句"))//此语句==!QSqlQuery.exec("在这里插入你的sql语句")

{

qDebug()<

}

else

{

qDebug()<

}

若是运行的查询语句,需知道数据库表中的格式及列数

使用如下示例,若表中为两列分别为 name 和 password

#include

QString login_check =QString("select * from userlogin;");

if(!SqlQuery.exec(login_check))//==!QSqlQuery.exec(create_sql)

{

qDebug()<

}

else

{

QString show_name ;

QString show_pwd ;

while(SqlQuery.next())

{

show_name = SqlQuery.value(0).toString();

show_pwd = SqlQuery.value(1).toString();

qDebug() <

}

if(show_name==NULL || show_pwd==NULL)

qDebug()<

}

表中数据以及在qt中收到数据如图所示

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库
qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

第二次更新

在qt5.14.2 release后,文件打包测试是无法直接连接mysql数据的

解决方法为在使用打包程序后,在exe同级目录下添加libmysql.dll

libmysql源文件位置所在如下图所示

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

第三次更新

因近期使用MiniGW 64-bit 进行编译,需要生成相应驱动,首先按MSVC中的方法进行拷贝,

环境均不用改,在编译前先将原来生成的D:\ plugin的目录剪切至其他地方

再次使用mysql.pro中的文件进行编译,选择MiniGW 64-bit 编译。

会生成如下文件

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库

将qsqlmysql.dll重新拷贝至下图目录,注意是mingw的,进行替换即可连接数据库。

Mingw 64 的大小是284kb ,MSVC 2017 64bit 的是61kb!

qt5 mysql 头文件_Qt 5.14.2 连接Mysql 数据库