MySQL存入图片+Qt读入读出数据库中的图片_MySQL

WBOY
Lepaskan: 2016-06-01 13:01:13
asal
1869 orang telah melayarinya

还记得之前的一个项目里要向数据库中存入图片,然后Qt要在数据库中读入读出图片,当时纠结了好久,查阅了很多资料才解决,所以希望本文能给需要朋友点帮助。好了废话不多说,下面开始讲实现步骤。

1.MySQL存入图片

首先建表时要声明字段的类型为longblob类型,如下:

create table `sfood`(
`name` varchar(255) not null,
`type` varchar(255) not null,
`material` varchar(255) not null,
`price` int(200) not null,
`feature` varchar(255) not null,
`image` longblob,
primary key(`name`)
)ENGINE=innodb default charset=gb2312;
Salin selepas log masuk

image就是我的图片字段,声明为longblob类型,表示食物的图片。

然后往表中插入数据:

insert into sfood(name,type,material,price,feature,image) values('生水白菜','川菜','白菜,生水',8,'清淡',LOAD_FILE('G:\\images\\chuancai\\baicai.jpg'));

这里LOAD_FILE('G:\\images\\chuancai\\baicai.jpg')的作用就是往image字段写入图片,这里用的是绝对路径,表示你图片所在的位子。这是在windows下,如果是在Linux下,要把目录间隔改成//。

这样我们就已经在数据库里写入了图片了。

2.在Qt里如何把图片从数据库里面读出来,接下来的代码都是以上面的表sfood为例:

QString select = "select * from sfood";
Salin selepas log masuk
query.exec(select);
Salin selepas log masuk
if( query.next() )
Salin selepas log masuk
{
Salin selepas log masuk
	QLabel *PicLabel = new QLabel();
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
QPixmap photo;
Salin selepas log masuk
    photo.loadFromData(query.value(5).toByteArray(), "JPG"); //从数据库中读出图片为二进制数据,图片格式为JPG,然后显示到QLabel里
Salin selepas log masuk
    PicLabel->setPixmap(photo);
Salin selepas log masuk
    PicLabel->setScaledContents(true);
Salin selepas log masuk
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
3.通过Qt往数据库中写入图片
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
query.exec("select * from sfood where name='"+nameEdit->text()+"'"); //我这里本段代码是添加菜品,该句是查询是否有该菜,按名字查询
Salin selepas log masuk
    if(query.next())
Salin selepas log masuk
    {
Salin selepas log masuk
        QMessageBox::information(this,tr("警告"),tr("该菜已在数据库存储了"));
Salin selepas log masuk
        db.Close();
Salin selepas log masuk
        return;
Salin selepas log masuk
    }
Salin selepas log masuk
    query.prepare("insert into sfood(name,type,material,price,feature,image) values(?,?,?,?,?,?)");
Salin selepas log masuk
    query.addBindValue(nameEdit->text());
Salin selepas log masuk
    query.addBindValue(typeEdit->text());
Salin selepas log masuk
    query.addBindValue(materialEdit->toPlainText());
Salin selepas log masuk
    query.addBindValue(priceEdit->text());
Salin selepas log masuk
    query.addBindValue(featureEdit->text());
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    //接下来代码是保存图片到数据库
Salin selepas log masuk
    imagePath.replace("\\","/");  //转换路径格式,imagePath是图片文件的路径,我这里用的是绝对路径
Salin selepas log masuk
    /*imagePath的获得方法可以这样写:
Salin selepas log masuk
imagePath = QFileDialog::getOpenFileName(this, tr("Open File"),
Salin selepas log masuk
                                                           "/home",
Salin selepas log masuk
                                                          tr("Images (*.jpg)"));
Salin selepas log masuk
    */
Salin selepas log masuk
    
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    QByteArray bytes;
Salin selepas log masuk
    QBuffer buffer(&bytes);
Salin selepas log masuk
    buffer.open(QIODevice::WriteOnly);
Salin selepas log masuk
    pictureLabel->pixmap()->save(&buffer,"JPG");
Salin selepas log masuk
    
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    QByteArray data;
Salin selepas log masuk
    QFile* file=new QFile(imagePath); //file为二进制数据文件名
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    file->open(QIODevice::ReadOnly);
Salin selepas log masuk
    data = file->readAll();
Salin selepas log masuk
    file->close();
Salin selepas log masuk
    QVariant var(data);
Salin selepas log masuk
    query.addBindValue(var);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
    query.exec();
Salin selepas log masuk

ok,已经通过Qt将图片写入数据库了。

没什么技巧,希望可以帮到跟我一样需要的菜鸟,也期望有师兄指教错误或者是有更好的方法。

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan