加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

QT5下SQLite的增删改查示例代码

发布时间:2020-12-12 19:28:38 所属栏目:百科 来源:网络整理
导读:Author: Kagula Date: 2016-8-10 Envrionment: Qt 5.6 Introduction: 从项目中抽出来的如何操作sqlite的代码,这里记下,免得时间久忘记了。 测试示例代码 void MainWindow::OnAdd(){ MySQLiteEscortStaffFingerPrint db; std::vectorEscortStaffFingerPrint

Author: Kagula

Date: 2016-8-10

Envrionment: Qt 5.6

Introduction:

从项目中抽出来的如何操作sqlite的代码,这里记下,免得时间久忘记了。


测试示例代码

void MainWindow::OnAdd()
{
    MySQLiteEscortStaffFingerPrint db;
    std::vector<EscortStaffFingerPrint> vecAdd;
    vecAdd.push_back(EscortStaffFingerPrint("0","0","2","fp","fp-md5"));
    vecAdd.push_back(EscortStaffFingerPrint("1","3","4","fp2","fp2-md5"));
    db.TableAdd(vecAdd);
}

void MainWindow::OnDelete()
{
    std::vector<QString> vecDel;
    vecDel.push_back("0");
    vecDel.push_back("1");

    MySQLiteEscortStaffFingerPrint db;
    db.TableDelete(vecDel);
}

void MainWindow::OnModify()
{
    std::vector<EscortStaffFingerPrint> vecModify;
    vecModify.push_back(EscortStaffFingerPrint("2","23","24","fp22","fp22-md5"));

    MySQLiteEscortStaffFingerPrint db;
    db.TableModify(vecModify);
}


新建数据库的示例代码

头文件

#ifndef MYSQLITE_H
#define MYSQLITE_H

#include <Qtsql/QSqlDatabase>

/*
 * parent class
 * function
 * [1]打开或新建DB
 * [2]关闭DB
 * */
class MySQLite
{
public:
    MySQLite();
    ~MySQLite();
private:
    QSqlDatabase m_dbconn;
};

#endif // MYSQLITE_H


实现文件

#include "mysqlite.h"

#include <Qtsql/QSqlQuery>
#include <QDebug>

MySQLite::MySQLite()
{
    m_dbconn = QSqlDatabase::addDatabase("QSQLITE");    //添加SQLite数据库驱动
    QString fullPath = "mytest.db";
    m_dbconn.setDatabaseName(fullPath);  //在工程目录新建一个mytest.db的文件
    if(!m_dbconn.open())    {
        qDebug()<<"open "<<fullPath<<" failed!";
    }
}


MySQLite::~MySQLite()
{
    m_dbconn.close();
}


增删改查的示例代码

头文件

#ifndef MYSQLITEESCORTSTAFFFINGERPRINT_H
#define MYSQLITEESCORTSTAFFFINGERPRINT_H

#include "mysqlite.h"

#include <QString>

#include <vector>

/*
 * [1]不支持线程,不建议long life span!
 * [2]class实例化后,使用完毕,应立即释放。
 * [3]服务端会把modify动作拆成delete,add两个动作,所以理论上不会有修改现存记录的动作。
 *    除非用户直接修改数据库EscortStaffFingerPrint表记录。
 * */

struct EscortStaffFingerPrint{
    QString idEscortStaffFingerPrint;
    QString idescortstaff;
    QString fingersequence;
    QString fingerprint;
    QString fingerprintmd5;
    EscortStaffFingerPrint(){}
    EscortStaffFingerPrint(QString idEscortStaffFingerPrint,QString idescortstaff,QString fingersequence,QString fingerprint,QString fingerprintmd5)
    {
        this->idEscortStaffFingerPrint = idEscortStaffFingerPrint;
        this->idescortstaff = idescortstaff;
        this->fingersequence = fingersequence;
        this->fingerprint = fingerprint;
        this->fingerprintmd5=fingerprintmd5;
    }
};

struct EscortStaffFingerPrintSimple{
    QString idEscortStaffFingerPrint;
    QString fingerprintmd5;
};


class MySQLiteEscortStaffFingerPrint:public MySQLite
{
public:
    MySQLiteEscortStaffFingerPrint();

    int m_maxid;

    std::vector<EscortStaffFingerPrintSimple> GetTableInfo();

    void TableQuery(const QString &idescortstaff,const QString &fingersequence,QString &sRegTemplate,QString &sRegTemplate10);
    void TableDelete(std::vector<QString> vecIdEscortStaffFingerPrint);
    void TableAdd(std::vector<EscortStaffFingerPrint> vecAdd);
    void TableModify(std::vector<EscortStaffFingerPrint> vecModify);
};

#endif // MYSQLITEESCORTSTAFFFINGERPRINT_H

实现文件
#include "mysqliteescortstafffingerprint.h"

#include <QDebug>

#include <QSqlQuery>

MySQLiteEscortStaffFingerPrint::MySQLiteEscortStaffFingerPrint():MySQLite()
{
    m_maxid = 0;

    QSqlQuery query;
    //sql originated from visual paradigm project.
    QString sql="CREATE TABLE EscortStaffFingerPrint (idEscortStaffFingerPrint number(10) NOT NULL,"
                "idescortstaff number(10) NOT NULL,fingersequence number(2) DEFAULT 0 NOT NULL,"
                "fingerprint varchar2(3072) NOT NULL,fingerprintmd5 varchar2(32) NOT NULL);";
    bool success = query.exec(sql);
    if(success){
        qDebug()<<"Create Table Success! n";
    }else{
        //table is already exist!
        QString sql = "select idEscortStaffFingerPrint from EscortStaffFingerPrint "
                      "order by idEscortStaffFingerPrint desc limit 0,1";
        QSqlQuery sql_query;
        sql_query.prepare(sql);
        if(sql_query.exec())
        {
            if(sql_query.next())
            {
                m_maxid = sql_query.value(0).toInt();
            }
        }
    }
    qDebug()<<"m_maxid="<<m_maxid<<"n";
}

std::vector<EscortStaffFingerPrintSimple> MySQLiteEscortStaffFingerPrint::GetTableInfo()
{
    std::vector<EscortStaffFingerPrintSimple> vecR;
    if(m_maxid<=0)
        return vecR;

    QString sql = "select idEscortStaffFingerPrint,fingerprintmd5 from EscortStaffFingerPrint "
                  "order by idEscortStaffFingerPrint";

    QSqlQuery sql_query;
    sql_query.prepare(sql);
    if(sql_query.exec())
    {
        while(sql_query.next())
        {
            EscortStaffFingerPrintSimple rec;
            rec.idEscortStaffFingerPrint = sql_query.value(0).toString();
            rec.fingerprintmd5 = sql_query.value(1).toString();

            vecR.push_back(rec);
        }
    }
    return vecR;
}


void MySQLiteEscortStaffFingerPrint::TableDelete(std::vector<QString> vecIdEscortStaffFingerPrint)
{
    for(unsigned int i=0;i<vecIdEscortStaffFingerPrint.size();i++)
    {
        QSqlQuery sql_delete;
        sql_delete.prepare("delete from EscortStaffFingerPrint where idEscortStaffFingerPrint=?");
        int idEscortStaffFingerPrint = vecIdEscortStaffFingerPrint[i].toInt();
        sql_delete.addBindValue(idEscortStaffFingerPrint);
        if(!sql_delete.exec())
        {
            qDebug()<<"delete record ["<<vecIdEscortStaffFingerPrint[i]<<"] in EscortStaffFingerPrint table failed!";
        }
    }
}


void MySQLiteEscortStaffFingerPrint::TableAdd(std::vector<EscortStaffFingerPrint> vecAdd)
{
    for(int i=0;i<vecAdd.size();i++)
    {
        QSqlQuery sql_add;
        sql_add.prepare("insert into EscortStaffFingerPrint values(?,?,?)");
        sql_add.addBindValue(vecAdd[i].idEscortStaffFingerPrint.toInt());
        sql_add.addBindValue(vecAdd[i].idescortstaff.toInt());
        sql_add.addBindValue(vecAdd[i].fingersequence.toInt());
        sql_add.addBindValue(vecAdd[i].fingerprint);
        sql_add.addBindValue(vecAdd[i].fingerprintmd5);
        if(!sql_add.exec())
        {
            qDebug()<<"insert record ["<<vecAdd[i].idEscortStaffFingerPrint<<"] in EscortStaffFingerPrint table failed!";
        }
    }
}

void MySQLiteEscortStaffFingerPrint::TableModify(std::vector<EscortStaffFingerPrint> vecModify)
{
    for(int i=0;i<vecModify.size();i++)
    {
        QSqlQuery sql_modify;
        sql_modify.prepare("update EscortStaffFingerPrint set idescortstaff=?,"
                           "fingersequence=?,fingerprint=?,fingerprintmd5=?"
                           " where idEscortStaffFingerPrint=?");
        sql_modify.addBindValue(vecModify[i].idescortstaff.toInt());
        sql_modify.addBindValue(vecModify[i].fingersequence.toInt());
        sql_modify.addBindValue(vecModify[i].fingerprint);
        sql_modify.addBindValue(vecModify[i].fingerprintmd5);

        sql_modify.addBindValue(vecModify[i].idEscortStaffFingerPrint.toInt());
        if(!sql_modify.exec())
        {
            qDebug()<<"modify record ["<<vecModify[i].idEscortStaffFingerPrint<<"] in EscortStaffFingerPrint table failed!";
        }//end if
    }//end for
}//end function

void MySQLiteEscortStaffFingerPrint::TableQuery(const QString &idescortstaff,QString &sRegTemplate10)
{
    std::vector<EscortStaffFingerPrintSimple> vecR;
    if(m_maxid<=0)
        return;

    QString sql = "select fingerprint from EscortStaffFingerPrint "
                  "where idescortstaff=? and fingersequence=?";

    QSqlQuery sql_query;
    sql_query.prepare(sql);
    sql_query.bindValue(0,idescortstaff.toInt());
    sql_query.bindValue(1,fingersequence.toInt());
    if(sql_query.exec())
    {
        if(sql_query.next())
        {
            QString fingerPrint = sql_query.value(0).toString();
            QStringList Str_List = fingerPrint.split(",");
            if(Str_List.size()==2)
            {
                sRegTemplate = Str_List[0];
                sRegTemplate10 = Str_List[1];
            }
        }
    }//end if
}//end function


附: .pro文件片段

QT       += core gui printsupport axcontainer sql

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读