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.添加系统环境变量

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

7.1 首先在pro中添加 
QT += sql  
7.2 并引用相应的头文件 
#include <QSqlDatabase>
7.3 在main中或widget中添加如下代码进行测试
    qDebug()<<"available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
        qDebug()<<driver;

    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()<<"failed";
    else
        qDebug()<<"success";
7.4 程序输出效果如下图所示

在这里插入图片描述

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

  1. 应该存在指定的数据库表名
  2. 检查数据库中所授权的用户名,通常默认情况下root 的 host 为“localhost”,故此,需要授权一个用户进行访问,使你的host 变为"%"即可
  3. 默认情况下,新授权的访问用户是没权限的,所以应该赋予权限给新添加的用户

先查询所授权的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 <QSqlError>
#include <QSqlQuery>

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

if(!SqlQuery.exec("在这里插入你的sql语句"))//此语句==!QSqlQuery.exec("在这里插入你的sql语句")
 {
     qDebug()<<"语句执行错误";
 }
 else
 {
	 qDebug()<<"语句执行成功";
 }

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

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

#include <QString>
  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() <<show_name<<show_pwd;
      }
      if(show_name==NULL || show_pwd==NULL)
           qDebug()<<"not user";
  }

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

在这里插入图片描述
在这里插入图片描述

第二次更新

在qt5.14.2 release后,文件打包测试是无法直接连接mysql数据的
解决方法为在使用打包程序后,在exe同级目录下添加libmysql.dll
libmysql源文件位置所在如下图所示
在这里插入图片描述

第三次更新
因近期使用MiniGW 64-bit 进行编译,需要生成相应驱动,首先按MSVC中的方法进行拷贝,
环境均不用改,在编译前先将原来生成的D:\ plugin的目录剪切至其他地方
再次使用mysql.pro中的文件进行编译,选择MiniGW 64-bit 编译。
会生成如下文件在这里插入图片描述
将qsqlmysql.dll重新拷贝至下图目录,注意是mingw的,进行替换即可连接数据库。
Mingw 64 的大小是284kb ,MSVC 2017 64bit 的是61kb!
在这里插入图片描述

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 可以使用MySQL Connector / C++ 5.14.2库来连接MySQL数据库。要在Qt 5.14.2中连接MySQL数据库,您需要安装QtMySQL驱动程序。以下是连接MySQL数据库的步骤: 1. 安装MySQL驱动程序 在Qt Creator中,打开菜单 "工具" -> "选项" -> "Kits" -> "Qt 5.14.2" -> "Desktop Qt 5.14.2 GCC 64-bit",然后在 "Qt版本" 下面的 "Qt模块" 中找到 "Qt SQL",确保其已选中。 2. 创建数据库连接Qt Creator中,打开菜单 "文件" -> "新建文件或项目" -> "应用程序" -> "Qt控制台应用程序",然后在 "项目名称" 和 "项目路径" 中输入名称和路径,点击 "下一步"。在 "类名" 中输入 "mainwindow",然后点击 "下一步"。在 "高级设置" 中选择 "Qt Widgets应用程序",然后点击 "完成"。 在 "mainwindow.cpp" 文件中添加以下代码: ``` #include <QCoreApplication> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); // MySQL服务器地址 db.setDatabaseName("database"); // 数据库名称 db.setUserName("username"); // 用户名 db.setPassword("password"); // 密码 if (db.open()) { qDebug() << "Connected to database!"; db.close(); } else { qDebug() << "Failed to connect to database!"; } return a.exec(); } ``` 请替换上述代码中的 "localhost"、"database"、"username" 和 "password" 为您的MySQL服务器地址、数据库名称、用户名和密码。然后编译和运行程序,如果连接成功,将在控制台输出 "Connected to database!"。 希望这能帮助到您! ### 回答2: 在Qt中使用MySQL数据库,需要先安装MySQL驱动程序。Qt提供了两个MySQL驱动程序:QMYSQL和QMYSQL3。其中,QMYSQL3已经被弃用,因此建议使用QMYSQL。 1. 安装MySQL驱动程序 在Qt Creator中,选择Tools -> Options -> Build & Run -> Kits,选中你正在使用的Kit,然后点击“Desktop Qt X.X.X”选项卡中的“Manual”按钮,在下拉菜单中选择“MySQL”,并在右侧配置MySQL的安装路径。配置完成后,点击“Apply”按钮,然后点击“OK”按钮,关闭选项对话框。 2. 创建连接 在代码中,要创建一个QSqlDatabase对象,并使用QSqlDatabase::addDatabase()函数来注册一个MySQL连接连接参数和MySQL服务器的相关信息应该以键值对的形式放入QSqlDatabase对象中。如下面的代码所示: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("root"); db.setPassword("mypassword"); if (!db.open()) { qDebug() << "Failed to connect MySQL database!"; } ``` 上述代码中,“localhost”是MySQL服务器的主机名,“mydatabase”是要连接数据库的名称,“root”是MySQL用户名,“mypassword”是用户的密码。如果连接失败,会在输出窗口中输出“Failed to connect MySQL database!”信息。 3. 执行SQL语句 连接成功后,就可以使用QSqlQuery对象执行SQL语句了。如下面的代码所示: ``` QSqlQuery query; query.exec("SELECT * FROM mytable"); while (query.next()) { QString name = query.value(0).toString(); int age = query.value(1).toInt(); qDebug() << name << " " << age; } ``` 上述代码中,“mytable”是要查询的表名,query.exec()函数用于执行SQL语句。如果SQL语句有返回结果,可以使用QSqlQuery::next()函数遍历结果集,并使用QSqlQuery::value()函数获取每一列的值。 在使用完毕后,需要关闭连接: ``` db.close(); ``` ### 回答3: Qt是一个跨平台的C++应用程序开发框架,可以非常轻松地实现界面设计、事件处理、网络通信和数据库操作等功能。MySQL是目前最流行的开源关系型数据库管理系统之一,其社区活跃、易于安装和维护,深受开发者欢迎。 在Qt连接MySQL数据库,需要进行以下几个步骤: 1. 安装MySQL驱动程序 Qt自带的驱动程序没有MySQL的驱动,需要手动下载MySQL驱动程序并安装。在Qt官网的下载页面上可以找到各个平台的MySQL驱动程序,下载后解压缩,将解压缩后的文件复制到Qt的安装目录下的plugins\sqldrivers文件夹内,即可完成驱动程序的安装。 2. 在Qt项目中添加MySQL驱动程序 在Qt项目的.pro文件中添加库文件libmysql.dll,如下所示: LIBS += -L/path/to/mysql -lmysql 其中,/path/to/mysqlMySQL安装目录的路径。 3. Qt连接MySQL数据库Qt代码中,使用如下代码连接MySQL数据库: QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); // 设置主机名 db.setPort(3306); // 设置端口号 db.setDatabaseName("dbname"); // 设置数据库名 db.setUserName("username"); // 设置用户名 db.setPassword("password"); // 设置密码 bool ok = db.open(); // 连接数据库 if(ok) { qDebug() << "数据库连接成功!"; } else { qDebug() << "数据库连接失败!"; } 其中,QSqlDatabase是Qt数据库对象的基类,addDatabase()函数用于创建一个MySQL数据库对象,setHostName()、setPort()、setDatabaseName()、setUserName()和setPassword()函数用于设置连接MySQL数据库的参数,open()函数用于连接数据库,返回值表示连接是否成功。 4. Qt中查询MySQL数据库Qt代码中,使用如下代码查询MySQL数据库: QSqlQuery query; query.exec("SELECT * FROM table"); while(query.next()) { QString name = query.value("name").toString(); int age = query.value("age").toInt(); qDebug() << name << age; } 其中,QSqlQuery是Qt中查询对象的基类,exec()函数用于执行SQL语句,next()函数用于遍历查询结果,value()函数用于获取查询结果的值,toString()函数和toInt()函数用于将值转换为QString和int类型,分别表示姓名和年龄。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MStudyStudio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值