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数据库及增删改查实例 的相关文章

  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • 我应该如何审核 MySQL 表中的更改(使用 MySQL 4)?

    我被要求审核 MySQL 表中的任何 所有更改 有谁知道有什么工具可以帮助我做到这一点 还是我需要编写自己的解决方案 如果我编写自己的审计 我最初的想法是制作一个单独的表并在 PHP 代码中构建一系列更改 类似 fieldname1 gt
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应
  • MySQL 字符串中的第二个(或第三个)索引

    查找字符串中第三个空格的索引的最简单方法是什么 我的目标是得到CCC在此空格分隔的列表之外 AAAA BBBB CCCC DDDD EEE 其中A B和D是固定长度 C是可变长度 E F G是可选的 在Java中 我会使用indexof 起
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 为什么我在 MySQL 中设置更大的 INT 数据类型长度时没有收到错误消息?

    我对 MySql 中的数据类型长度有点困惑 我阅读了参考手册http dev mysql com doc refman 5 0 en data types html http dev mysql com doc refman 5 0 en
  • Hibernate + MySQL + rewriteBatchedStatements=true

    我有以下 Hibernate 配置
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • MySQL - 多个结果集

    我正在使用 NET Connector 连接到 MySQL 在我的应用程序中 很少有线程使用相同的连接 因此如果 MySQLDataReader 尚未关闭并且某个线程正在尝试执行查询 则会出现该错误 已经有一个打开的 DataReader
  • 在MySQL中生成随机字符串

    我正在尝试使用函数在 phpmyadmin 中获取随机字符串 我有以下代码 CREATE FUNCTION randomPassword RETURNS varchar 128 BEGIN SET chars ABCDEFGHIJKLMNO
  • 日期时间与时间戳字段

    我是 MySQL 数据库的新手 您是否建议在表创建中使用日期时间或时间戳字段以及原因 我正在使用 MySQL 5 7 和 innodb 引擎 Thanks 我会用TIMESTAMP对于任何需要自动管理的事情 因为它支持诸如ON UPDATE
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • MySQL 可选的带有 MATCH 的 LEFT JOIN

    我有以下查询 它对 MySQL Innodb 数据库中同一搜索词的两个不同表中的两列执行全文搜索 SELECT Id MATCH tb1 comment tb2 comment AGAINST search term IN BOOLEAN
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不

随机推荐