【最新】Qt5.13及以上版本如何访问MySQL数据库

Qt访问数据库的坑还是挺多的。在5.13及以上版本中,QMYSQL驱动被去除了,不能直接使用。在新版本中访问MySQL还是挺麻烦的,故在此记录一下。


安装Qt时的坑

首先前往官网下载Qt:Qt下载地址

这里我选择最新的5.14.2目录下的qt-opensource-windows-x86-5.14.2.exe.

下载后双击安装,注意选择组件界面:

在这里插入图片描述
在这里插入图片描述
此处有两个注意事项:

  1. 必须选上Sources,里面有MySQL依赖的dll
  2. 要根据MySQL的位数选择对应的编译器,如64位的MySQL必须使用64位的MingW才能正常访问(网传如此,笔者未测试过32位是否使用)

别的组件根据自己的需求添加即可,安装部分就讲到这里。


配置驱动

此时我们就可以查看一下Qt中有哪些sql驱动了。

新建一个Qt Console Application项目用于测试,选择MingW-64bit作为Debugger.

在.pro文件中加入以下语句,引入sql功能:

QT += sql

main.cpp写法如下:

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  QStringList drivers = QSqlDatabase::drivers();
  foreach(QString driver, drivers)
  qDebug() << driver;

  return a.exec();
}

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  QStringList drivers = QSqlDatabase::drivers();
  foreach(QString driver, drivers)
  qDebug() << driver;

  return a.exec();
}

输出结果:

"QSQLITE"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

输出结果中并没有我们想要的QMYSQL驱动,我们需要另行配置。

添加驱动

打开\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql目录下的mysql.pro文件启动项目,对mysql.pro作出以下修改:

# QMAKE_USE += mysql # 暂时屏蔽mysql
...
INCLUDEPATH += "D:\software\system\mysql-8.0.19-winx64\include" # MySQL安装路径下的include目录
LIBS += "D:\software\system\mysql-8.0.19-winx64\lib\libmysql.lib" # MySQL安装路径下的库文件
DESTDIR  = ../mysql/lib/ # 输出目录

运行之后会报错,不要紧,找到同级目录下的lib目录,所需dll已经生成:
在这里插入图片描述
将生成的dll文件放入对应编译器的plugins\sqldrivers目录中,这里存放了所有sql驱动,此处我放到Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers中:
在这里插入图片描述
再次运行测试程序,输出结果:

"QSQLITE"
"QMYSQL"
"QMYSQL3"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

我们所需的QMYSQL驱动已经存在。

添加依赖

有了驱动之后还不够,我们还需要引入mysql中的dll文件,打开mysql安装路径:mysql-8.0.19-winx64\lib,复制其中的libmysql.dlllibmysql.lib到项目编译后的目录中,本例为与项目目录同级的build-sql_test-Desktop_Qt_5_14_2_MinGW_64_bit-Debug,这也意味着最后的打包程序中也需要手动添加这两个依赖。

在这里插入图片描述


访问操作

我们来试验一个简单的遍历全表:

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

int main(int argc, char *argv[]) {
  QCoreApplication a(argc, argv);

  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 数据库类型
  db.setHostName("localhost"); // 主机名
  db.setPort(3306);
  db.setDatabaseName("hello_mysql"); // 数据库名称
  db.setUserName("root"); // 用户名
  db.setPassword("123"); // 密码

  if(!db.open()){
    qDebug()<<"Unable to establish a database connection";
  }else{
  QSqlQuery query(db);

  query.exec("select * from user");
  while(query.next())
    qDebug()<<query.value(0).toString() // 访问方式一,通过列数索引
    <<query.value("name").toString(); // 访问方式二,通过列名

  db.close();
  }

  return a.exec();
}

输出结果:

"1" "雪之下雪乃"
"2" "小木曾雪菜"
"4" "友利奈绪"
"5" "晓美焰"
"6" "冬马和纱"
"7" "雪之下阳乃"

这就是新版Qt访问MySQL的全过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值