在上篇文章中描述了怎样搭建读写数据库的环境。
本文更进一步,描述了读写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
#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
还没有评论,来说两句吧...