今天小编给大家分享一下Qt怎么使用SQLite数据库存储管理图片文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1)增删改查效果
2)数据库内容
首先在.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; }
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; }
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(); // 刷新界面 ………………………… }
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; } ………………………… // 刷新界面 ……………………………… }
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); ………………………… // 刷新界面 ………………………… }
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(); }
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数据库存储管理图片文件”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。