如何在Qt中使用数据库Sqlite保存和提取图片-阿里云开发者社区

开发者社区> y2hr4cjzssnlm> 正文

如何在Qt中使用数据库Sqlite保存和提取图片

简介: 如何在Qt中使用数据库Sqlite保存和提取图片
+关注继续查看

先看Qt官方的例子:源码来自How to Store and Retrieve Image on SQLite

https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite


#include "mainwindow.h"
//源码来自
//How to Store and Retrieve Image on SQLite
//https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite
#include <QApplication>
#include <QtSql>
#include <QtWidgets>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // Set up database
    QString dbName("myDatabase.db3"); //默认路径在文件夹build-sqldemo-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug
    QFile::remove(dbName);            // delete sqlite file if it exists from a previous run
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(dbName);
    db.open();
    QSqlQuery query = QSqlQuery(db);
    query.exec("CREATE TABLE IF NOT EXISTS imgTable ( filename TEXT, imagedata BLOB )");
    // Generate an image (in this case a screenshot) and store it in a QByteArray
    QScreen *screen = a.primaryScreen();
    QPixmap inPixmap = screen->grabWindow(0);
    QByteArray inByteArray;
    QBuffer inBuffer(&inByteArray);
    inBuffer.open(QIODevice::WriteOnly);
    inPixmap.save(&inBuffer, "PNG"); // write inPixmap into inByteArray in PNG format
    // Alternatively, load an image file directly into a QByteArray
    // QFile file("screenshot.png");
    // if (!file.open(QIODevice::ReadOnly)) return;
    // QByteArray inByteArray = file.readAll();
    // Insert image bytes into the database
    // Note: make sure to wrap the :placeholder in parenthesis
    query.prepare("INSERT INTO imgTable (filename, imagedata) VALUES ('screenshot.png', :imageData)");
    query.bindValue(":imageData", inByteArray);
    if (!query.exec())
        qDebug() << "Error inserting image into table:\n"
                 << query.lastError();
    // Get image data back from database
    if (!query.exec("SELECT imagedata from imgTable"))
        qDebug() << "Error getting image from table:\n"
                 << query.lastError();
    query.first();
    QByteArray outByteArray = query.value(0).toByteArray();
    QPixmap outPixmap = QPixmap();
    outPixmap.loadFromData(outByteArray);
    db.close();
    // Display image
    QLabel myLabel;
    myLabel.setPixmap(outPixmap);
    myLabel.show();
    //MainWindow w;
    //w.show();
    return a.exec();
}


打开文件,读取二进制数据


 

QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly)) return;
    QByteArray byteArray = file.readAll();
    QSqlQuery query;
    query.prepare("INSERT INTO imgtable (imgdata) VALUES (?)");
    query.addBindValue(byteArray);
    query.exec();



打开多个数据库


QString connName = "basedb"
 QSqlDatabase db ;
 if(QSqlDatabase::contains(connName)){
        //如已经打开这个数据库,直接调出这个数据连接
      db = QSqlDatabase::database(connName);
    }else //否则打开这个数据库,注意带上数据库名
      db = QSqlDatabase::addDatabase("QSQLITE",connName);
//操作数据库1
QSqlQuery query;
//默认数据库1
query.exec("select * from student");
//操作数据库2
QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE","a");
//连接数据库2
QSqlQuery query(db2);
//绑定db2
query.exec("select * from teacher");


---


推荐阅读:


https://www.sqlite.org/index.html


http://qtdebug.com/qtbook-db-util/


http://qtdebug.com/qtbook-db-common/


http://www.qtcn.org/bbs/read-htm-tid-88649.html


https://gitee.com/feiyangqingyun/QWidgetDemo/tree/master/dbpage


https://blog.csdn.net/wsj18808050/article/details/44891715


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在ArcGIS中如何使用直连方式连接Oracle数据库
1.      背景 直连方式比使用SDE方式更加稳定,特别是在大数据量处理的应用中,不易出场由SDE连接进程造成的gsvr错误。
1053 0
Spring Security笔记:使用数据库进行用户认证(form login using database)
在前一节,学习了如何自定义登录页,但是用户名、密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证 一、项目结构 与前面的示例相比,因为要连接db,所以多出了一个spring-database.
875 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(二)
使用iOS原生sqlite3框架对sqlite数据库进行操作
49 0
Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介、安装、使用方法之详细攻略
Dataset之Handwritten Digits:Handwritten Digits(手写数字图片识别)数据集简介、安装、使用方法之详细攻略
73 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(五)
使用iOS原生sqlite3框架对sqlite数据库进行操作
23 0
使用iOS原生sqlite3框架对sqlite数据库进行操作(一)
使用iOS原生sqlite3框架对sqlite数据库进行操作
36 0
SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用(二)
SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用
31 0
FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地
FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地
22 0
682
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载