QT中连接Mysql数据库及增删改查实例

2023-05-16

QT连接Mysql数据库步骤相对比较麻烦,因此写了篇文章将详细过程呈现给大家,欢迎大家来评论区指导提问。

方法一、直接通过MySQL的驱动加载数据库
示例代码:

(1)在.pro文件中添加下列代码:

QT +=sql
(2)在mainwindow.h文件中添加下列头文件:

#include<QSqlDatabase>
 (3)在main.cpp文件中添加下列代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //连接本地主机
    db.setPort(3306);
    db.setDatabaseName("数据库名");
    db.setUserName("用户名");
    db.setPassword("密码");
    bool ok = db.open();
    if (ok){
        QMessageBox::information(this, "infor", "link success");
    }
    else {
        QMessageBox::information(this, "infor", "link failed");
        qDebug()<<"error open database because"<<db.lastError().text();
    }
 
运行代码,如果连接Mysql成功则输出下面结果:

如果连接Mysql失败则输出:

 如果连接Mysql失败也不用太灰心,方法一在初次连接时很多情况下都会出错。下面我们来看看第二种成功率更高的连接方法。

方法二、通过ODBC连接MySQL数据库
ODBC下载官网
(1)选择适合自己QT版本的ODBC版本。具体如何查看自己QT是多少位的,可以通过QT软件上方的菜单栏  帮助->About QT Creator 查看位数

 (2)点击DownLoad后会进入下面的界面

 点击No thanks,just start my download即可下载,不用点击上面的登录按钮,否则会有繁琐的登录步骤。

(3)下载完ODBC后,双击安装,一直点next即可完成安装。

(4)安装之后在电脑左下角的搜索栏中输入ODBC即可查看安装后的ODBC

(5)点击添加按钮添加用户DSN.

(6)点击MYSQL ODBC 8。0 ANSI Driver。

(7)这里的内容按照下面提示对应填好即可。

(8)完成Mysql的添加后,可以点击Test按钮测试一下能否连接。

 

 

2.ODBC连接代码
代码如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("刚刚在ODBC中创建的Data source name"); //不是Database,记得别填错
    db.setUserName("用户名");
    db.setPassword("密码");
    bool ok = db.open();
    if (ok){
        QMessageBox::information(this, "infor", "link success");
    }
    else {
        QMessageBox::information(this, "infor", "link failed");
        qDebug()<<"error open database because"<<db.lastError().text();
    }
恭喜你走到这一步,离成功连接Mysql只差最后一步!运行代码,一般都是可以完成连接的了。

总结
QT连接Mysql数据库的步骤相对繁琐,但是也是一个不错的学习经历。希望可以帮到大家,欢迎大家指导评论。
/*************************************************************

         QT连mysql数据库,大家装的数据库普遍都是8.0的版本,64位的,这里直接用QMYSQL连接,发现缺少驱动,而且我们用的Qt creater是32位,所以这里选择另一种方式去链接数据库通过QODBC(开放数据库连接),如果你们用的64的mingw,或者是msvc_2013,64位的,那么就可以不用这个方法,直接连就可以了

首先,在自己的数据库中找到这2个文件

放在目录下

 点击控制面板找到这个图标

 随后点击ODBC Data Sources (32-bit)

配置

点击Test可以出现下窗口则连接成功

                       ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

下面进行代码检测

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("test");
if(!db.open()){
    qDebug()<<"打开失败";
}else{
    qDebug()<<"打开成功";
}
QSqlQuery query(db);
//关联数据库
query.exec("select * from teacher"); //执行语句用的
while(query.next()) {
       qDebug()<<query.value(0).toString()<<" "
                <<query.value(1).toString()<<" "
                <<query.value(2).toString();
}

效果如下

如果是msvc 64位,或者是migw64的

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
db.setHostName("127.0.0.1"); 
db.setPort(3306);//是mysql服务器的端口号 
db.setDatabaseName("test"); 
db.setUserName("root"); 
db.setPassword("123456"); 
if (!db.open()) { 
    qDebug() << QString::fromLocal8Bit("打开失败"); 
    return 0; 

else{ 
    qDebug() << QString::fromLocal8Bit("打开成功"); 

QSqlQuery query(db); //关联数据库 
query.exec("select * from 。。。。;"); //使用查询语句
while (query.next()) { 
    /*
    对查询结果进行输出
    */
}
小结:

        里面的本机信号和之后的127.0.0.1之后会在网络编程篇章继续详解原因,有了数据库的帮助之后可以更好的处理许多问题。
/*****************************************************************

QT连接Mysql数据库步骤相对比较麻烦,因此写了篇文章将详细过程呈现给大家,欢迎大家来评论区指导提问。

方法一、直接通过MySQL的驱动加载数据库
示例代码:

(1)在.pro文件中添加下列代码:

QT +=sql
(2)在mainwindow.h文件中添加下列头文件:

#include<QSqlDatabase>
 (3)在main.cpp文件中添加下列代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //连接本地主机
    db.setPort(3306);
    db.setDatabaseName("数据库名");
    db.setUserName("用户名");
    db.setPassword("密码");
    bool ok = db.open();
    if (ok){
        QMessageBox::information(this, "infor", "link success");
    }
    else {
        QMessageBox::information(this, "infor", "link failed");
        qDebug()<<"error open database because"<<db.lastError().text();
    }
 

运行代码,如果连接Mysql成功则输出下面结果:

如果连接Mysql失败则输出:

 如果连接Mysql失败也不用太灰心,方法一在初次连接时很多情况下都会出错。下面我们来看看第二种成功率更高的连接方法。

方法二、通过ODBC连接MySQL数据库
ODBC下载官网
(1)选择适合自己QT版本的ODBC版本。具体如何查看自己QT是多少位的,可以通过QT软件上方的菜单栏  帮助->About QT Creator 查看位数

 (2)点击DownLoad后会进入下面的界面

 点击No thanks,just start my download即可下载,不用点击上面的登录按钮,否则会有繁琐的登录步骤。

(3)下载完ODBC后,双击安装,一直点next即可完成安装。

(4)安装之后在电脑左下角的搜索栏中输入ODBC即可查看安装后的ODBC

(5)点击添加按钮添加用户DSN.

(6)点击MYSQL ODBC 8。0 ANSI Driver。

(7)这里的内容按照下面提示对应填好即可。

(8)完成Mysql的添加后,可以点击Test按钮测试一下能否连接。

2.ODBC连接代码
代码如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("刚刚在ODBC中创建的Data source name"); //不是Database,记得别填错
    db.setUserName("用户名");
    db.setPassword("密码");
    bool ok = db.open();
    if (ok){
        QMessageBox::information(this, "infor", "link success");
    }
    else {
        QMessageBox::information(this, "infor", "link failed");
        qDebug()<<"error open database because"<<db.lastError().text();
    }
恭喜你走到这一步,离成功连接Mysql只差最后一步!运行代码,一般都是可以完成连接的了。

总结
QT连接Mysql数据库的步骤相对繁琐,但是也是一个不错的学习经历。希望可以帮到大家,欢迎大家指导评论。
/************************************************

刚开始一直在通过qt直接连MySQL数据库,谁知从来没有成功,各种装数据库,各种编译驱动,全都无果,就在我将要放弃的时候,看到一个人用ODBC连接数据库成功了,我看到了希望,可是试了好几次都没有成功,我一度怀疑我不适合干这行,就在我安慰自己再尝试一次的时候,我终于成功了,好高兴。

下面讲一下我成功的过程:

1. MySQL安装
MySQL Installer下载: https://dev.mysql.com/downloads/installer/
我下载的是这个:

安装的时候选择自定义安装,安装MySQL Server 和 Connector/ODBC两个模块就可以,注意,Connector/ODBC有64位和32位可选,这里如何选择呢?你应该看你的Qt是32位的还是64位的,如果你用的windows操作系统,那么你大概率用的32位的,所以你应该安装32位的Connector/ODBC,如果你不确定,可以打开你的Qt Creator软件,在最上方选择帮助—>About Qt Creator即可查看

多说一句,我把我的MySQL数据库路径加入了环境变量,我不知道这起没起作用,你们暂且试试。

2. Qt安装
Qt下载:https://www.qt.io/offline-installers
我下载的是:

安装的时候我选择的是全部安装。

3. ODBC连接
安装完ODBC之后,会出现64位和32位两个版本,我选择的是32位的,打开之后,依此设置:
选择 用户DSN, 点击 添加

找到箭头所指的驱动,双击

然后看到如下界面,

下面是我的设置,Data Source Name随便填写一个名字就好了,Description随便添就好了,用户和密码填写你设置的,Database点击下拉箭头,选择一个就好,最后点击Test,不出意外应该显示连接成功,然后点击OK

4. 连接代码
首先在 .pro 文件里面加入QT += sql,然后在头文件中加入 #include <QSqlDatabase> 和 #include <QMessageBox>
代码如下:

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("mysql");
    db.setUserName("root");
    db.setPassword("root");
    bool ok = db.open();
    if (ok){
        QMessageBox::information(this, "infor", "success");
    }
    else {
        QMessageBox::information(this, "infor", "open failed");
    }

注意:setDatabaseName种填入的应该是你前面填入的Data Source Name
执行:

/******************************************************

第一步要加入对应的数据库模块(sql)在工程文件(.pro)介绍几个类(也是对应的头文件)

  •  QSqlError提供SQL数据库错误信息的类
  •   QSqlQuery提供了执行和操作SQL语句的方法     
  • QSqlQueryDatabase 处理到数据库的连接  

 1.数据库的连接

1

2

3

4

5

6

7

8

9

10

11

12

//添加mysql数据库

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

       //连接数据库

       db.setHostName("127.0.0.1");//数据库服务器IP

       db.setUserName("root");  //数据库用户名

       db.setPassword("root");//数据库用户名密码

       db.setDatabaseName("sys"); //数据库名

       if(db.open()==false)

       {

           QMessageBox::information(this,"数据库打开失败",db.lastError().text());

           return;

       }

  如果失败可能是QT连接mysql数据库要一个库(自己下载  libmysql.dll)把库文件放在QT的安装目录D:\Qt\5.9\mingw53_32\bin(根据自己的目录) 我的QT版本是5.9。数据库是否打开用户是否错误是否有这个数据库。

2.创建表

1

2

QSqlQuery q;

q.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int)ENGINE=INNODB;");

3.给表插入数据

方法1(单行插入)

1

q.exec("insert into student(id, name, age,score) values(1, '张三', 24,80);");

方法2 (多行插入)又分为 odbc 风格 与 oracle风格

   1. odbc 风格

1

2

3

4

5

6

7

8

9

10

11

12

13

q.prepare("insert into student(name, age,score) values(?, ?, ?)");  //?是占位符

  QVariantList name;

  name<<"素数"<<"等待"<<"安安";

  QVariantList age;

  age<<-2<<12<<14;

  QVariantList score;

  score<<0<<89<<90;

  //给字段绑定相应的值 按顺序绑定

  q.addBindValue(name);

  q.addBindValue(age);

  q.addBindValue(score);

  //执行预处理命令

  q.execBatch();

  要加#include<QVariantList>头文件 字段要按顺序绑定

    2.orace风格d

1

2

3

4

5

6

7

8

9

10

11

12

13

14

//占位符 :+自定义名字

  q.prepare("insert into student(name, age,score) values(:n, :a,:s)");

  QVariantList name;

  name<<"夸克"<<"红米"<<"鸿蒙";

  QVariantList age;

  age<<5<<10<<3;

  QVariantList score;

  score<<77<<89<<99;

  //给字段绑定 顺序任意因为根据:+自定义名字

  q.bindValue(":n",name);

  q.bindValue(":s",score);

  q.bindValue(":a",age);

  //执行预处理命令

  q.execBatch();

 根据占位符区别所以字段顺序可以任意

3.更新表

1

2

QSqlQuery q;

        q.exec("update student set score=76 where name='李四'");

 4.删除表

1

2

QSqlQuery q;

        q.exec("delete from student  where name='张三'");

5.遍历表

1

2

3

4

5

6

7

8

9

10

11

QSqlQuery q;

    q.exec("select *from student");

    while(q.next())   //遍历完为false

    {

        //以下标

        //qDebug()<<q.value(0).toInt()<<q.value(1).toString()<<q.value(2).toInt()

        <<q.value(3).toInt();

        //以字段

        qDebug()<<q.value("id").toInt()<<q.value("name").toString()<<q.value("age").toInt()

        <<q.value("score").toInt();

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT中连接Mysql数据库及增删改查实例 的相关文章

  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • Google Cloud SQL 在重新启动时卡住

    我的云 sql 实例长时间处于重新启动状态 在操作窗格中 重新启动的状态显示为待处理 并且还发生了导出 其状态仍为Running 有没有办法可以强制重新启动或取消重新启动或从常规备份中恢复数据 不 没有办法 如果您向 Google 支付高级
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • MySQL 排序顺序 - 排序规则?

    我在对 MySQL 中的 char 字段进行排序时遇到困难 问题是重音字符与非重音字符混淆 例如 Abc bd Acc 我认为这可能与整理有关 所以我将表格的排序规则更改为utf8 ut8 bin 看完之后这个帖子 https stacko
  • mysql 中的二进制、十六进制和八进制值

    我对在 mysql 数据库中使用二进制 十六进制和八进制系统非常感兴趣 首先 请给我一个建议 为什么我们在存储信息时需要它们 因为信息太多 或者为什么 另外 哪种类型的值必须存储在标记系统中 另外这里还有像 这是例子 gt SELECT 5

随机推荐