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

2023年 8月 11日 37.6k 0

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

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()

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论