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

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

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

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

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

#include
 (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"<     }
 
运行代码,如果连接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按钮测试一下能否连接。

QT中连接Mysql数据库及增删改查实例_第1张图片

 QT中连接Mysql数据库及增删改查实例_第2张图片

 

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"<     }
恭喜你走到这一步,离成功连接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()<                 <                 < }

效果如下

如果是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
 (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"<     }
 

运行代码,如果连接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"<     }
恭喜你走到这一步,离成功连接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 和 #include
代码如下:

    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头文件 字段要按顺序绑定

    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()<

        <

        //以字段

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

        <"score").toInt();

    }

你可能感兴趣的:(数据库,qt,数据库,mysql)