• QT+MySQL图片插入数据库并显示 2013-03-12 13:58:52


     

    分类: Windows平台

    MySQL数据库要想插入图片,其字段需要是BLOB类型。
    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

    在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。

    BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

    MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。

    MySQL的四种BLOB类型

    类型 大小(单位:字节)
    TinyBlob 最大 255

    Blob 最大 65K

    MediumBlob 最大 16M

    LongBlob 最大 4G

    选择图片文件:
    QString strImage = QFileDialog::getOpenFileName(
    this,

    "Please Select image file",

    g_strCurrentDir,

    "Image Format (*.png *.jpg *.bmp *.gif)");

    if (strImage.isNull())

    {
    return;

    }

    g_strCurrentDir = QDir(strImage).absolutePath();

    ui->labelPic->setPixmap(QPixmap(strImage).scaled(ui->labelPic->size()));

    //保存图片到数据库中:
    QByteArray bytes;

    QBuffer buffer(&bytes);

    buffer.open(QIODevice::WriteOnly);

    ui->labelPic->pixmap()->save(&buffer, "JPG");

    QByteArray data;

    QSqlQuery query;
    QString path = strImage;

    QFile* file=new QFile(path); //fileName为二进制数据文件名

    file->open(QIODevice::ReadOnly);
    data = file->readAll();

     file->close();

    Variant var(data);

    QString sql = "insert into images(Image) values(?)";

     query.prepare(sql);

    query.addBindValue(var);

    if(!query.exec())

    {

    qDebug()<<query.lastError().text().toLocal8Bit().data();

    }

     else

    {

    qDebug()<<"Insert success";
    }

    }



    //显示数据库里的图片
         QSqlQuery q("SELECT * FROM images WHERE PicNum = 108");
       while (q.next())
        {
        if (q.isNull(0) == false)
        {
        QPixmap photo;
        ui->num->setText(q.value(0).toString());
        photo.loadFromData(q.value(1).toByteArray(), "JPG");
        ui->UserPicLabel->setPixmap(photo);
         qDebug()<<"Query success";
        }
        else
        {
            qDebug()<<"Query failed";
        }
       }
    //连接数据库
    #ifndef CONNECTION_H
    #define CONNECTION_H
    #include <QMessageBox>
    #include <QFile>
    #include <QFileDialog>
    #include <QTextStream>
    #include <QString>
    #include <QDebug>
    static bool createConnection()
    {

       QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
       db.setDatabaseName("test");
       db.setHostName("172.17.54.133");
       db.setPort(3306);
       db.setUserName("root");
       db.setPassword("213517");
       if(!db.open())
       {
           QMessageBox::critical(0,qApp->tr("Cannot connect server"),qApp->tr("Unable to establish a database connection. "),QMessageBox::Cancel);
           return false;
           qDebug()<<"Connect MySql error!";
       }

       return true;

    }


    #endif // CONNECTION_H

    注意:图片插入数据库和显示时其格式必须是和图片本身的格式对应的,不然不能显示。
    ex:  photo.loadFromData(q.value(1).toByteArray(), "JPG");
    源码下载:   SQLPicTest.rar
    数据库下载:test.rar

  • 相关阅读:
    嵌入式系统的应用
    linux shell编程
    JS高级学习历程-1
    JavaScript入门
    二叉树 数据结构
    用css固定textarea文本域大小尺寸
    ie img 3px bug
    OpenCV-Python(1)在Python中使用OpenCV进行人脸检测
    教你用Python解决非平衡数据问题(附代码)
    图片人脸检测(OpenCV版)
  • 原文地址:https://www.cnblogs.com/IamQtCreator/p/4555472.html
Copyright © 2020-2023  润新知