在上篇文章中描述了怎样搭建读写数据库的环境。
本文更进一步,描述了读写mySQL数据库,字符、整型数字、图片。读写图片相对难点。
数据库的图片字段用BLOB,如果图片较大要用longblob,否则会报错。
另外,读写数据库都使用了短连接,完成后关闭连接
本文代码在QT6.2.4 MSVC2019 +MySQL5.7.44_X64 调试通过。

//1.数据库字段

图1-数据库字段示意图
//2.界面

图2-界面
//3.代码
//3.1 头文件
#ifndef WIDGET_H
 #define WIDGET_H
#include <QWidget>
 #include <QPushButton>
 #include <QLabel>
 #include <QVBoxLayout>
 #include <QtSql/qtsql>
 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::drivers();
     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.lastError().text();
         return ;
     }
     else
     {
         qDebug()<<"数据库连接成功";
     }
   
     QString imagePath = "d:/Pictures/LeiJun.png";
     // 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::drivers();
     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.lastError().text();
          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()<<m_name;
     lb_name->setText(m_name);
     //年龄
     m_age = query.value(1).toInt();
     qDebug()<<m_age;
     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