QT C++ 读写mySQL数据库 图片 例子

QT C++ 读写mySQL数据库 图片 例子

码农世界 2024-05-31 后端 67 次浏览 0个评论

在上篇文章中描述了怎样搭建读写数据库的环境。

本文更进一步,描述了读写mySQL数据库,字符、整型数字、图片。读写图片相对难点。

数据库的图片字段用BLOB,如果图片较大要用longblob,否则会报错。

另外,读写数据库都使用了短连接,完成后关闭连接

本文代码在QT6.2.4 MSVC2019 +MySQL5.7.44_X64 调试通过。

QT C++ 读写mySQL数据库 图片 例子

//1.数据库字段

QT C++ 读写mySQL数据库 图片 例子

              图1-数据库字段示意图

//2.界面

QT C++ 读写mySQL数据库 图片 例子

图2-界面

//3.代码

//3.1 头文件

#ifndef WIDGET_H

#define WIDGET_H

#include

#include

#include

#include

#include

QT_BEGIN_NAMESPACE

namespace Ui {

class Widget;

}

QT_END_NAMESPACE

class Widget : public QWidget

{

    Q_OBJECT

public:

    Widget(QWidget *parent = nullptr);

    ~Widget();

    void initUI();//初始化界面

    QPushButton* btn_write ;//写入按钮

    QPushButton* btn_read;//读取按钮

    QLabel * lb_name;//显示姓名

    QLabel * lb_age;//显示年龄

    QLabel * lb_picture;//显示图片

  

private:

    Ui::Widget *ui;

    QByteArray m_imageData2;//图片的字节数组

    QString m_name;//姓名变量

    int m_age;//年龄变量

private slots:

    void btn_write_click();//写入按钮子程序

    void btn_read_click();//读取按钮子程序

};

#endif // WIDGET_H

//-----------------------------------------------------------------------------------------------------------

//3.2  cpp文件

#include "widget.h"

#include "ui_widget.h"

Widget::Widget(QWidget *parent)

    : QWidget(parent)

    , ui(new Ui::Widget)

{

    ui->setupUi(this);

    initUI();

}

void Widget::initUI()

{

     QVBoxLayout* vlayout = new QVBoxLayout();

     btn_write = new QPushButton(this);

     btn_write->setText("写入数据库");

     btn_write->setFixedWidth(100);

     vlayout->addWidget(btn_write);

     btn_read = new QPushButton(this);

     btn_read->setText("读数据库");

     btn_read->setFixedWidth(100);

     vlayout->addWidget(btn_read);

     lb_name=new QLabel("待读出姓名");

     lb_name->setFixedWidth(100);

     vlayout->addWidget(lb_name);

     lb_age=new QLabel("待读出年龄");

     lb_age->setFixedWidth(100);

     vlayout->addWidget(lb_age);

     lb_picture=new QLabel("待读出图片");

      vlayout->addWidget(lb_picture);

     setLayout(vlayout);

    QObject::connect(btn_write, &QPushButton::clicked,this,&Widget::btn_write_click);

    QObject::connect(btn_read, &QPushButton::clicked,this,&Widget::btn_read_click);

}

void Widget::btn_write_click()

{

    qDebug()<

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

    db.setHostName("127.0.0.1");

    db.setPort(3306);

    db.setDatabaseName("db_name");//你自己的数据库名称

    db.setUserName("root");

    db.setPassword("123456");

    if (!db.open()) {

        qDebug()<<"不能连接"<<"connect to mysql error"<

        return ;

    }

    else

    {

        qDebug()<<"数据库连接成功";

    }

   

    QString imagePath = "d:/Pictures/LeiJun.png";

    // QString imagePath = "d:/Pictures/labview.jpeg";

    // Read image file

    QFile file(imagePath);

    if (!file.open(QIODevice::ReadOnly)) {

        qDebug() << "Error: Failed to open image file";

        return  ;

    }

    QByteArray imageData = file.readAll();

    QSqlQuery query;

    query.prepare("INSERT INTO test (name, age,image) VALUES (:value1, :value2, :value3)");

    query.bindValue(":value1", "LeiJun");

    query.bindValue(":value2", 50);

    query.bindValue(":value3", imageData);

    if (!query.exec())

    {

        qDebug() << "Failed to insert data. Error: " << query.lastError().text();

        db.close();

        return  ;

    }

    qDebug() << "Data inserted successfully";

    db.close();

}

void Widget::btn_read_click()

{

    qDebug()<

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

    db.setHostName("127.0.0.1");

    db.setPort(3306);

    db.setDatabaseName("db_name");//你自己的数据库名称

    db.setUserName("root");

    db.setPassword("123456");

    if (!db.open()) {

        qDebug()<<"不能连接"<<"connect to mysql error"<

         db.close();

        return ;

    }

    else

    {

        qDebug()<<"数据库连接成功";

    }

   

     //读图片

     QSqlQuery query;

      query.exec("SELECT * FROM test WHERE name = 'LeiJun' LIMIT 1;");

    if (!query.next()) {

        qDebug() << "Error: Failed" << query.lastError().text();

         db.close();

        return ;

    }

    else

        qDebug() << "读数据成功";

    //姓名

    m_name = query.value(0).toString();

    qDebug()<

    lb_name->setText(m_name);

    //年龄

    m_age = query.value(1).toInt();

    qDebug()<

    lb_age->setText(QString::number(m_age));

    //图片的二进制

    m_imageData2 = query.value(2).toByteArray();//转换成字节数组

    // Create image from data

    QPixmap pixmap;

    pixmap.loadFromData(m_imageData2);

     lb_picture->setPixmap(pixmap);显示图片

    db.close();

}

Widget::~Widget()

{

    delete ui;

}

//4.代码下载链接

https://download.csdn.net/download/weixin_39926429/89374527

转载请注明来自码农世界,本文标题:《QT C++ 读写mySQL数据库 图片 例子》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,67人围观)参与讨论

还没有评论,来说两句吧...

Top