iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Qt使用SQLite数据库存储管理图片文件
  • 656
分享到

Qt使用SQLite数据库存储管理图片文件

QtSQLite管理图片文件Qt管理图片文件QtSQLite 2023-05-16 11:05:11 656人浏览 薄情痞子
摘要

目录1、效果演示2、创建数据库及表格2.1 创建数据库2.2 创建数据库表格3、增删改查3.1 增加记录3.2 删除记录3.3 修改记录3.4 查找记录3.5 遍历表格记录1、效果演

1、效果演示

1)增删改查效果

2)数据库内容

2、创建数据库及表格

2.1 创建数据库

首先在.pro文件添加对sql的支持:Qt += core gui sql

QString g_connectName = "Mysql_connection";

bool MainWindow::createDatabase()
{
    //检测已连接的方式 - 自定义连接名
    if(QSqlDatabase::contains(g_connectName))
    {
        m_Projdb = QSqlDatabase::database(g_connectName);
    }
    else
    {
        m_Projdb = QSqlDatabase::aDDDatabase("QSQLITE",g_connectName);

        //设置数据库路径
        QString sDir = QApplication::applicationDirPath();
        QString sDataPath = sDir + "/mysql.db";
        m_Projdb.setDatabaseName(sDataPath);
    }

    //打开数据库
    if(!m_Projdb.open())
    {
        QMessageBox::infORMation(this,"提示","数据库创建失败,无法打开!");
        return false;
    }

	// 创建表格
    createImageTable();

    //关闭数据库
    m_Projdb.close();

    return true;
}

2.2 创建数据库表格

bool MainWindow::createImageTable()
{
     …………………………
     
    //如果不存在则创建my_table表,id自增,name唯一
    const QString cmdSql = R"(
                           CREATE TABLE IF NOT EXISTS image_table (
                           id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
                           imagename TEXT NOT NULL,
                           type CHAR(50) NOT NULL,
                           notes TEXT,
                           imagedata BLOB NOT NULL
                           );)";

    //QSqlQuery构造前,需要db已打开并连接;未指定db或者db无效时使用默认连接进行操作
    QSqlQuery myQuery(m_Projdb);

    if(!myQuery.exec(cmdSql))
    {
        QString sError = myQuery.lastError().text();
        sError = "数据库表格插入数据失败:" + sError;
        QMessageBox::information(this,"提示",sError);
        m_Projdb.close();
        return false;
    }

     …………………………
     

    return true;
}

3、增删改查

3.1 增加记录

void MainWindow::on_pushBtn_add_clicked()
{
    QString strImag = ui->lineEdit_file->text();
    QFileInfo fileInfo(strImag);
    ………………
    QString sName = fileInfo.fileName();
    QString sType = fileInfo.suffix();
    QString strNote = ui->plainTextEdit_add->toPlainText();

    if(ImageFileExist(sName))
    {
        QMessageBox::information(this,"提示","图片文件已经存在!");
        return;
    }

	//将数据转换为QByteArray类型存储到数据库中
    QFile* pFile = new QFile(strImag);
    pFile->open(QIODevice::ReadOnly);
    
    QByteArray imageData = pFile->readAll();
    pFile->fileName();
    pFile->close();
    if(!m_Projdb.open())
    {
        QMessageBox::information(this,"提示","数据库无法打开!");
        return;
    }
    //QSqlQuery构造前,需要db已打开并连接;未指定db或者db无效时使用默认连接进行操作
    QSqlQuery myQuery(m_Projdb);
    QString cmdSql = "insert into image_table(imagename,type,notes,imagedata) values( '%1','%2','%3',:imagedata)";
    cmdSql = QString(cmdSql).arg(sName).arg(sType).arg(strNote);
    qDebug() << cmdSql;
    myQuery.prepare(cmdSql);
    myQuery.bindValue(":imagedata",imageData);
    if(!myQuery.exec())
    {
        QString sError = myQuery.lastError().text();
        sError = "数据库表格插入数据失败:" + sError;
        QMessageBox::information(this,"提示",sError);
        m_Projdb.close();
        return;
    }

    QMessageBox::information(this,"提示","添加成功!");

    m_Projdb.close();

    // 刷新界面
    …………………………
}

3.2 删除记录

void MainWindow::on_pushBtn_del_clicked()
{
    …………………………
    //QSqlQuery构造前,需要db已打开并连接;未指定db或者db无效时使用默认连接进行操作
    QSqlQuery myQuery(m_Projdb);
    QString cmdSql = "DELETE from image_table where imagename = '%1'";
    cmdSql = QString(cmdSql).arg(sFileName);

    qDebug() << cmdSql;

    if(!myQuery.exec(cmdSql))
    {
        QString sError = myQuery.lastError().text();
        sError = "数据库表格删除数据失败:" + sError;
        QMessageBox::information(this,"提示",sError);
        m_Projdb.close();
        return;
    }
    …………………………
    // 刷新界面
    ………………………………
}

3.3 修改记录

void MainWindow::on_pushBtn_modify_clicked()
{
    ……………………
    
    QString sNote = dlg.GetNoteString();
    QSqlQuery myQuery(m_Projdb);
    QString cmdSql = "UPDATE image_table SET notes = '%2' where imagename = '%1'";
    cmdSql = QString(cmdSql).arg(sFileName).arg(sNote);

    …………………………

    // 刷新界面
    …………………………
}

3.4 查找记录

void MainWindow::on_pushBtn_preview_clicked()
{
     ………………………………
    //QSqlQuery构造前,需要db已打开并连接;未指定db或者db无效时使用默认连接进行操作
    QSqlQuery myQuery(m_Projdb);
    QString cmdSql = "select * from image_table where imagename = '%1'";
    cmdSql = QString(cmdSql).arg(sFileName);

    qDebug() << cmdSql;

    if(!myQuery.exec(cmdSql))
    {
        QString sError = myQuery.lastError().text();
        sError = "数据库表格查询数据失败:" + sError;
        QMessageBox::information(this,"提示",sError);
        m_Projdb.close();
        return;
    }

    while (myQuery.next())
    {
        QString strFileName = myQuery.value(1).toString();
        QString strFileType = myQuery.value(2).toString();
        QString strNote = myQuery.value(3).toString();

        QByteArray bytes = myQuery.value(4).toByteArray();
        QBuffer buffer(&bytes);
        buffer.open(QIODevice::ReadOnly);
        QImageReader reader(&buffer,strFileType.toLatin1());
        QImage img = reader.read();
        img.save(strFileName);
        break;
    }

    m_Projdb.close();
}

3.5 遍历表格记录

bool MainWindow::GetAllImageRecord()
{
     ………………………………
    
    // 查询表格数据
    const QString cmdSql = R"(SELECT * FROM image_table;)";

    //QSqlQuery构造前,需要db已打开并连接;未指定db或者db无效时使用默认连接进行操作
    QSqlQuery myQuery(m_Projdb);
    if(!myQuery.exec(cmdSql))
    {
        QString sError = myQuery.lastError().text();
        sError = "数据库表格插入数据失败:" + sError;
        QMessageBox::information(this,"提示",sError);
        m_Projdb.close();
        return false;
    }

    while (myQuery.next())
    {
        QString sFileName, sFileType,sNotes;

        for (int i = 0; i < myQuery.record().count(); i++)
        {
            QString strFieldName = myQuery.record().fieldName(i);
            QVariant value = myQuery.record().value(i);
            if(strFieldName == "imagename")
            {
                QString strValue = value.toString();
                sFileName = strValue;
            }
            if(strFieldName == "type")
            {
                QString strValue = value.toString();
                sFileType = strValue;
            }
            if(strFieldName == "notes")
            {
                QString strValue = value.toString();
                sNotes = strValue;
            }
        }

		if (!sFileName.isEmpty() && !sFileType.isEmpty())
		{
			FileInfo fileInfo;
			fileInfo.sName = sFileName;
			fileInfo.sType = sFileType;
            fileInfo.sNotes = sNotes;
			m_vecImageFile.push_back(fileInfo);
		}
    }

   …………………………
   
}

到此这篇关于Qt使用SQLite数据库存储管理图片文件的文章就介绍到这了,更多相关Qt SQLite管理图片文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Qt使用SQLite数据库存储管理图片文件

本文链接: https://www.lsjlt.com/news/209595.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt使用SQLite数据库存储管理图片文件
    目录1、效果演示2、创建数据库及表格2.1 创建数据库2.2 创建数据库表格3、增删改查3.1 增加记录3.2 删除记录3.3 修改记录3.4 查找记录3.5 遍历表格记录1、效果演...
    99+
    2023-05-16
    Qt SQLite管理图片文件 Qt 管理图片文件 Qt SQLite
  • Qt怎么使用SQLite数据库存储管理图片文件
    今天小编给大家分享一下Qt怎么使用SQLite数据库存储管理图片文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、效果演...
    99+
    2023-07-06
  • Android 通过SQLite数据库实现数据存储管理
    目录0 实验环境1 界面展示2 功能说明3 设计原理4 核心代码4.1 UI设计4.2 编写有关Java类(1)MainActivity类,用于初始化一些变量和注册组件:(2)DbH...
    99+
    2024-04-02
  • Android如何通过SQLite数据库实现数据存储管理
    这篇文章主要介绍了Android如何通过SQLite数据库实现数据存储管理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。0 实验环境在Android Studio中进行有关代...
    99+
    2023-06-25
  • qt中怎么使用sqlite数据库
    在Qt中使用SQLite数据库,首先需要在项目中包含Qt的SQL模块,然后在代码中进行数据库的连接、查询等操作。 以下是使用SQLi...
    99+
    2024-04-09
    sqlite qt
  • 实现向MYSQL数据库中存储或提取图片文件
    一些情况下,需要向数据库中存储一些2进制文件,比如图片文件等,这时候,向数据库存储数据不同于普通的字符串存储,我们需要对这个2进制文件使用JAVA处理2进制流的API进行处理,然后再进行存储。我们需要进行以...
    99+
    2024-04-02
  • mysql数据库能不能存储图片
    这篇文章主要介绍了mysql数据库能不能存储图片,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。MySQL是一个关系型数据库管理系统,由瑞典MyS...
    99+
    2024-04-02
  • mysql数据库怎样储存读取图片
    这篇文章主要介绍了mysql数据库怎样储存读取图片,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql储存读取图片的方法:首先将图片转换成缓...
    99+
    2024-04-02
  • 如何在Android中使用SQLite存储数据
    这篇文章给大家介绍如何在Android中使用SQLite存储数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 安装一个SQLiteDeveloper,这个用来打开android生成的数据库。软件随便搜索就能找到,后面...
    99+
    2023-05-30
    android sqlite
  • qt中使用sqlite数据库报错怎么解决
    在Qt中使用SQLite数据库时,可能会遇到一些常见的错误。以下是一些常见的错误和解决方法: “Driver not loaded...
    99+
    2024-04-02
  • Qt数据库应用之实现图片转pdf
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用。 ...
    99+
    2024-04-02
  • PHP与数据库存储管理的集成
    随着互联网的发展,现代企业的业务已经越来越依赖于计算机的支持与管理,而数据库的重要性也愈发凸显。在这种情况下,无论是企业还是程序员都不可避免地需要使用数据存储管理的技术手段。PHP语言作为互联网最广泛使用的脚本语言之一,其在数据库存储管理方...
    99+
    2023-05-17
    集成 PHP 数据库管理
  • 探索阿里云文档数据库高效存储和管理文档数据
    阿里云文档数据库是一种以文档为中心的数据库服务,旨在帮助企业存储和管理文档数据。它采用了阿里云独特的分布式存储和处理技术,能够支持大量并发读写操作,满足企业的高并发、高可用需求。本文将深入探讨阿里云文档数据库的特点、优势以及应用场景。 一、...
    99+
    2023-11-11
    文档 高效 阿里
  • ASP.NET和SQL Server数据库图片存储如何实现
    这篇文章主要为大家展示了“ASP.NET和SQL Server数据库图片存储如何实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ASP.NET和SQL Server数据库图片存储如何实现”这篇...
    99+
    2023-06-18
  • Qt数据库应用之实现数据图文混排
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 除了能够打印基本的文字信息数据到pdf和纸张,越来越多的应用需求还要求能够导出图片,并且要支持图文混排,相当于do...
    99+
    2024-04-02
  • Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)
    Android Studio开发项目图书管理系统项目视频展示: 点击进入图书管理系统项目视频 引 言 现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一...
    99+
    2023-10-26
    android studio android sqlite 数据库 java
  • SpringBoot分布式文件存储数据库mongod
    目录1、mongodb服务2、创建springboot项目3、添加mongodb依赖4、application.yml配置5、实体类6、通过MongoRepository实现增删改查...
    99+
    2023-02-02
    SpringBoot mongod SpringBoot分布式文件存储数据库
  • 将图片储存在MySQL数据库中的几种方法
    通常对用户上传的图片需要保存到数据库中。 解决方法一般有两种: 1、将图片保存的路径存储到数据库; 2、将图片以二进制数据流的形式直接写入数据库字段中。 以下为具体方法: 一、保存图片的上传路径到数据库: ...
    99+
    2024-04-02
  • Qt数据库应用之怎么实现图片转pdf
    本篇内容介绍了“Qt数据库应用之怎么实现图片转pdf”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果图五、相关代码void Da...
    99+
    2023-06-30
  • VScode第三方插件打开sqlite数据库图文教程
    目录前言对比1.文本文件、表格软件打开2.专业软件3.pythonVScode 第三方库打开数据库1. 下载第三方库插件2.打开SQLite新建查询3.输入查询内容总结前言 最近在做的东西涉及SQLite数据库(一种常用...
    99+
    2023-06-10
    vscode 数据库插件 vscode如何使用第三方库 vscode使用数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作