返回顶部
首页 > 资讯 > 数据库 >Qt连接MySQL数据库最详细的教程
  • 316
分享到

Qt连接MySQL数据库最详细的教程

mysqlqt数据库 2023-10-02 13:10:57 316人浏览 八月长安
摘要

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.直接通过MySQL的驱动加载数据库1)所需代码2)解决QMYSQL driver not loaded

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


原文链接:https://blog.csdn.net/joey_ro/article/details/105411135

Qt连接数据库折磨了三天之后终于连接成功了,记录一下希望对看到的人有所帮助。

1.直接通过Mysql的驱动加载数据库

1)所需代码

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", "success");    }    else {        QMessageBox::information(this, "infor", "open failed");        qDebug()<<"error open database because"<<db.lastError().text();    }

当然要在.pro文件中添加一行引入

QT += sql

如果显示:
在这里插入图片描述
那么恭喜你太幸运了,你已经成功连接MySQL数据库了,快去使用吧。
如果显示:
在这里插入图片描述
也不要灰心接着往下看我的电脑就一直显示失败
在这里插入图片描述
没有QMYSQL的驱动,这是怎么回事呢?

2)解决QMYSQL driver not loaded

Qt连接到mysql的过程:app->Qt的数据库插件->mysql动态库->mysql服务。

Qt的数据库插件位于“C:\Qt(安装路径)(Qt版本)\版本号(库)\mingw49_32(编译器)\plugins(插件)\sqldrivers(数据库插件)” 下的qsqlmysqld.dll(debug版本用) qsqlmysql.dll(release版本用).

mysql动态库位于“C:\Qt\MySQLServer5.5(mysql安装路径)\lib”下的“libmysql.dll“

i:将mysql下的ilbmysql.lib和libmysql.dll复制到Qt的bin目录下
ii:查看自己的qt中有没有qsqlmysqld.dll(debug版本用) qsqlmysql.dll(release版本用)
如果都有:
运行一下代码:

//输出可用数据库    qDebug()<<"available drivers:";    QStringList drivers = QSqlDatabase::drivers();    foreach(QString driver, drivers)        qDebug()<<driver;

如果输出中含有MySQL,那么恭喜你说明你的qt有MySQL驱动了:
在这里插入图片描述
如果没有,不要灰心,因为我的就是一直没有MySQL驱动:
在这里插入图片描述
大家可以重新下载一些不同的版本尝试一下,我尝试了无数次后不得不放弃,就选择了另一条路,通过ODBC连接MySQL数据库。

2.通过ODBC连接MySQL数据库

1)官方解释

ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的api(应用程序编程接口)方法来访问数据库管理系统(DBMS)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。
简单的说就是我的qt中含有ODBC的驱动:

在这里插入图片描述
所以利用ODBC去使用MySQL的数据库。

2)下载ODBC

官网
https://dev.mysql.com/downloads/connector/odbc/

在这里插入图片描述
选择和qt编译器相同的字节比如我的qt使用的是64字节的
在这里插入图片描述

下载的ODBC选择的也是64字节的,选择MSI类型的直接安装就可以
在这里插入图片描述
下载一直点击next即可:
在这里插入图片描述
查看点击小娜,搜索ODBC,
在这里插入图片描述

3)连接MySQL数据库

i添加MySQL的DSN
在这里插入图片描述
红色的可以随便填,是自己对于ODBC驱动的描述,粉色的是MySQL的用户名和密码,数据库选择你在MySQL中创建的数据库名字即可。
在这里插入图片描述
点击test如果出现下图说明连接成功
在这里插入图片描述
在这里插入图片描述
需要依次填写,其中Data Source Name在使用QT连接ODBC时会用到,此处我写了3,自己取个名字即可。对于Description没有要求,随便写个默认的描述就行。最下面的Database要选择你自己电脑中的数据库,比如我的数据库式binshop,我就选择binshop,选择数据库后点击旁边的Test,可以测试时候连接成功。
本文测试用到的sql文件一并放在下载连接里面,需要的可以直接下载。完成后如下所示。多了一条名称为3的描述

原文链接:https://blog.csdn.net/weixin_43552197/article/details/123550924
在这里插入图片描述

4)qt通过ODBC连接MySQL

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");    db.setHostName("127.0.0.1");    db.setPort(3306);    db.setDatabaseName("是你在ODBC中创建的Data source name");    db.setUserName("用户名");    db.setPassword("密码");    bool ok = db.open();    if (ok){        QMessageBox::information(this, "infor", "success");    }    else {        QMessageBox::information(this, "infor", "open failed");        qDebug()<<"error open database because"<<db.lastError().text();    }    

运行程序:
在这里插入图片描述
大功告成

3.qt通过ODBC操作数据库

1)查询数据

代码:

//查询数据库中所有表的名称    QStringList tables = db.tables();    foreach(QString table, tables)        qDebug()<<table;//ODBC查询数据    QSqlQuery result = db.exec(" select * from users");    while(result.next()){        qDebug()<<"user_id:"<<result.value("user_id").toInt();        qDebug()<<"name:"<<result.value("name").toString();        qDebug()<<"password:"<<result.value("password").toString();        qDebug()<<"score:"<<result.value("score").toInt()<<endl;    }

2)插入数据

//ODBC插入数据    result.clear();    bool result_successed = result.exec("insert into users(name,password,score) values ( 'joe2y','123456',0)");    if(result_successed){        qDebug()<<"插入成功!";    }else {        qDebug()<<"插入失败!";}

3)更新数据

//ODBC更新数据    result.clear();    bool result_successed2 = result.exec("update users set score=10 where user_id=2");    if(result_successed2){        qDebug()<<"更新成功!"<<endl;    }else{        qDebug()<<"更新失败!"<<endl;    }

Win10安装MySQL出现错误2503 2502 的解决办法

原文链接:https://blog.csdn.net/qq_43422918/article/details/116202995

  1. 打开任务管理器:Ctrl+Alt+Del。

  2. 点击任务管理器左上角的文件按钮:
    在这里插入图片描述

  3. 再点击 运行新任务(n)按钮。

  4. 手动输入所下载的MySQL安装文件的地址+文件名。比如我放在D:\MySQL文件夹里,文件名为:mysql-installer-WEB-commUnity-5.7.21.0.msi,就输入:D:\MySQL\mysql-installer-web-community-5.7.21.0.msi,务必要打上 下面的勾。
    在这里插入图片描述

  5. 点击确定进行安装,祝安装成功!

QT使用ODBC连接MySQL

Https://blog.csdn.net/weixin_43552197/article/details/123550924?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168247337716800180645494%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168247337716800180645494&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-123550924-null-null.142v86control,239v2insert_chatgpt&utm_term=qt%20odbc%E8%BF%9E%E6%8E%A5mysql&spm=1018.2226.3001.4187

widget.h文件如下

#ifndef WIDGET_H#define WIDGET_H#include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{    Q_OBJECTpublic:    Widget(QWidget *parent = nullptr);    ~Widget();    void QueryData(QSqlDatabase db);private slots:    void on_pushButton_clicked();    void on_tableView_doubleClicked(const QModelIndex &index);private:    Ui::Widget *ui;};#endif // WIDGET_H

widget.cpp如下

#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent)    : QWidget(parent)    , ui(new Ui::Widget){    ui->setupUi(this);}Widget::~Widget(){    delete ui;}void Widget::QueryData(QSqlDatabase db){    // 查询数据库中所有表的名称    QStringList tables = db.tables();    foreach(QString table, tables)        qDebug()<<table;    // ODBC查询数据    QSqlQuery result = db.exec("select * from commodity");    while(result.next())    {        qDebug()<<"user_id:"<<result.value("ID").toInt();        qDebug()<<"name:"<<result.value("name").toString();        qDebug()<<"password:"<<result.value("type").toString();        qDebug()<<"score:"<<result.value("price").toInt()<<endl;    }    // 将数据库的内容显示到tableview控件中    static QSqlQueryModel *mode= new QSqlQueryModel(ui->tableView);    mode->setQuery("select * from commodity");    mode->setHeaderData(0,Qt::Horizontal,tr("ID"));    mode->setHeaderData(1, Qt::Horizontal, tr("name"));    mode->setHeaderData(2,Qt::Horizontal,tr("type"));    mode->setHeaderData(3, Qt::Horizontal, tr("price"));    ui->tableView->setModel(mode);}// 查询按钮void Widget::on_pushButton_clicked(){    // 通过ODBC连接MYSQL数据库    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");    db.setHostName("127.0.0.1");    db.setPort(3306);    // 使用ODBC连接时自己设置的名字(data source name)    db.setDatabaseName("3");    db.setUserName("root");    db.setPassword("123456");    bool ok = db.open();    // 判断数据库是否连接成功    if (ok){        // QMessageBox::information(this, "infor", "success");    }    else {        // QMessageBox::information(this, "infor", "open failed");        qDebug()<<"error open database because"<<db.lastError().text();    }    //db.exec("insert commodity values('005','显卡','RTX3090',9500)");    // 指定条件查询    QSqlQuery query("SELECT * FROM `commodity` where price > 8000",db);    QSqlRecord rec = query.record();    while(query.next())    {        rec = query.record();        int id = rec.indexOf("ID");        QString ID = query.value(id).toString();        qDebug()<<"ID"<<ID;        int na = rec.indexOf("name");        QString name = query.value(na).toString();        qDebug()<<"name"<<name;    }    QueryData(db);}// 给tableview添加双击事件。void Widget::on_tableView_doubleClicked(const QModelIndex &index){    int row=index.row();    int col=index.column();    // qDebug()<    // qDebug()<    QString id = ui->tableView->model()->index(row,col).data().toString();    qDebug()<<id;}

main.cpp如下

#include "widget.h"#include int main(int arGC, char *argv[]){    QApplication a(argc, argv);    Widget w;    w.show();    return a.exec();}

UI文件如下
在这里插入图片描述
只增加了一个按钮和一个tableview。
,程序运行的结果如下
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_46577050/article/details/130377947

您可能感兴趣的文档:

--结束END--

本文标题: Qt连接MySQL数据库最详细的教程

本文链接: https://lsjlt.com/news/422676.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作