完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 【EVB-335X-II试用体验】之QT远程操作MySql数据库图片数据的写入与读取 我们在上一篇试用报告中,交叉编译了QT下的访问MySql数据库的客户端驱动程序,并且配置了基于Ubuntu虚拟机的数据库服务器远程访问参数,安装了基于图形用户界面的数据库配置软件mysql-workbench,最后,编写了一个QT远程访问MySql数据库的例子。 由于在铸造车间中,数据管理系统需要保存、查看每一试样的金相组织图片,所以我们的车间数据中继服务器还需具备远程查询、添加金相组织图片的能力,这篇试用报告将介绍如何创建图像数据库表、添加图片、查询图片,同上一篇报告,这篇试用报告通用采用远程访问MySql数据库的方式。 1. 基于命令行创建数据库表 1)通过命令行远程登陆MySql数据库 输入命令: mysql -h 192.168.1.102 -P3306 -u root -p 输入密码:sy31214 执行结果如图所示: 2)查询MySql包含哪些数据库表 我们在上一章,创建了一个test_db1数据库,我们在命令行模式下,查看该数据库是否存在: show databases; 结果如下: 3)执行命令选择test_db1,并查看该数据包含的数据库表 use test_db1; show tables; 执行结果如下: 4)执行命令创建保存图片的数据库表 5)查看sfood数据库表的结构 describe sfood; 执行结果如图所示: 在MySql数据库中保存图片的数据格式多采用blob数据类型,被例采用mediumblob,最大可以保存16M的图片。 2. 设计QT程序 1)创建QT项目工程 启动Qtcreator,创建mysql_qt_image工程,设计软件界面如图所示: 2)编写“连接远程数据库”函数 代码如下: Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("suiliuyunyuDB"); db.setUserName("root"); db.setPassword("123"); if (!db.open()) { QMessageBox::information(this,tr("系统提示"),tr("建立数据库链接失败!")); } } 3)编写“打开图片”函数 代码如下: QString str=QFileDialog::getOpenFileName(this, tr("Open File"), tr("/home"), tr("Images (*.jpg)")); ui->imagePath->setText(str); 4)编写“保存”函数 代码如下: if(!db.isOpen()) db.open(); QSqlQuery query; query.exec("select * from sfood wherename='"+ui->nameEdit->text()+"'"); //我这里本段代码是添加菜品,该句是查询是否有该菜,按名字查询 if(query.next()) { QMessageBox::information(this,tr("警告"),tr("该菜已在数据库存储了")); db.close(); return; } query.prepare("insert intosfood(name,type,material,price,feature,image) values(?,?,?,?,?,?)"); query.addBindValue(ui->nameEdit->text()); query.addBindValue(ui->typeEdit->text()); query.addBindValue(ui->materialEdit->text()); query.addBindValue(ui->priceEdit->text()); query.addBindValue(ui->featureEdit->text()); //接下来代码是保存图片到数据库 QByteArray data; QFile *file=new QFile(ui->imagePath->text()); //file为二进制数据文件名 file->open(QIODevice::ReadOnly); data = file->readAll(); file->close(); QVariant var(data); query.addBindValue(var); query.exec(); 5)编写“读取图片”函数 if(!db.isOpen()) db.open(); QString select = "select * from sfood"; QSqlQuery query; query.exec(select); if( query.next() ) { // QLabel *PicLabel = new QLabel(); QPixmap photo; photo.loadFromData(query.value(5).toByteArray(), "JPG"); //从数据库中读出图片为二进制数据,图片格式为JPG,然后显示到QLabel里 ui->labelImage->setPixmap(photo); ui->labelImage->setScaledContents(true); } 6)编译工程 执行build名称,生产mysql_qt_image可执行程序,并将mysql_qt_image拷贝到NFS共享目录下。 7)编译工程 准备一张jpg格式的图片,保存在NFS共享目录下,本例选用如下图片: 执行命令: sudo chmod777 /nfsshare/*.jpg 否则在EVB-335X-II开发板测试时,无法打开该文件。 3. EVB-335X-II上电测试 1)配置EVB-335X-II开发板 执行命令: mount -t nfs 192.168.1.102:/nfsshare /mnt-o nolock exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/qt/plugins/sqldrivers 2)在EVB-335X-II开发板上启动mysql_qt_image 执行命令: ./mysql_qt_image 执行结果如图所示: 点击“选择图片”按钮,选择图片,如图所示: 依次输入图片的其他相关信息,点击“保存”按钮,将图片数据保存到MySql数据库中。 点击“读取图片”,QT程序从远程数据库服务器读取数据并显示在QT软件界面中,效果如图所示: 4. 小结 用两篇试用报告,完成了EVB-335X-II开发板对MySql数据库的远程操作,同时实现了远程插入、读取远程数据库中的图片数据,为铸造车间的数据管理系统车间级数据中继服务器在功能上做了技术储备。 ` 评分
|
||
相关推荐
2 个讨论
|
||
只有小组成员才能发言,加入小组>>
【盈鹏飞RK3399安卓主板 XPC-3399Pro免费试用】+烧写出厂固件
10324 浏览 0 评论
【盈鹏飞EVB-T335开发板试用体验】debian系统烧写
3353 浏览 1 评论
【盈鹏飞I.MX6UL工控开发板试用体验】linux can 测试
3228 浏览 0 评论
308浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:44 , Processed in 0.779096 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号