亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt怎么使用SQLite數據庫存儲管理圖片文件

發布時間:2023-04-14 11:32:28 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

今天小編給大家分享一下Qt怎么使用SQLite數據庫存儲管理圖片文件的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、效果演示

1)增刪改查效果

Qt怎么使用SQLite數據庫存儲管理圖片文件

2)數據庫內容

Qt怎么使用SQLite數據庫存儲管理圖片文件

Qt怎么使用SQLite數據庫存儲管理圖片文件

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數據庫存儲管理圖片文件”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清流县| 唐海县| 迁安市| 页游| 安龙县| 娱乐| 阆中市| 五原县| 台江县| 海宁市| 上蔡县| 沙田区| 四平市| 新津县| 聂荣县| 商南县| 泽库县| 东丽区| 大宁县| 桦南县| 凌源市| 本溪市| 肃北| 永和县| 新竹县| 西贡区| 永昌县| 黎川县| 太原市| 师宗县| 平原县| 新河县| 汨罗市| 河西区| 易门县| 乌审旗| 石棉县| 武邑县| 电白县| 青河县| 达拉特旗|