这是一个用来监控本地文件夹变化的服务
bak
w1146869587
2021-11-09 337adce3b32612903dce4b963c7db6c8ba0202a4
mbwatch/mbwatchuserdb.cpp
@@ -1,22 +1,224 @@
#include "mbwatchuserdb.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QRandomGenerator>
#include <QDebug>
CMBWatchUserDb::CMBWatchUserDb()
{
    m_pMgr = new CMBWatchUserMgr();
    m_pMgr      = NULL;
    m_tableName = "TN_WATCH_USER";
}
CMBWatchUserDb::~CMBWatchUserDb()
{
    if( m_pMgr ){
        delete m_pMgr;
        m_pMgr = NULL;
}
void CMBWatchUserDb::setUserMgr(CMBWatchUserMgr *pMgr)
{
    m_pMgr = pMgr;
}
QSqlDatabase CMBWatchUserDb::openDataBase()
{
    quint32 value = QRandomGenerator::global()->generate();
    QSqlDatabase db;
    if ( true == QSqlDatabase::contains(QString::number(value)))
    {
        db = QSqlDatabase::database(QString::number(value));
    }
    else
    {
        db = QSqlDatabase::addDatabase("QSQLITE", QString::number(value));
        db.setDatabaseName(m_path);
    }
    if (false == db.open())
    {
        qDebug() << db.lastError().text();
    }
    return db;
}
void CMBWatchUserDb::closeDataBase(QString connectionName)
{
    if( QSqlDatabase::contains(connectionName) ){
       QSqlDatabase::removeDatabase(connectionName);
    }
}
bool CMBWatchUserDb::execSql(QString sql, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    QString connectionName;
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery query(db);
        query.prepare(sql);
        if( !query.exec()){
            errInfo = query.lastError().text();
            return false;
        }
        query.clear();
    }
    closeDataBase(connectionName);
    return true;
}
bool CMBWatchUserDb::execSql(QSqlDatabase &db, QString sql, QString &errInfo)
{
    QSqlQuery query(db);
    query.prepare(sql);
    if( !query.exec()){
        errInfo = query.lastError().text();
        return false;
    }
    query.clear();
    return true;
}
bool CMBWatchUserDb::getTmpFiledSql(QString sql, QString &tmpValue, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    QString connectionName;
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery query(db);
        query.prepare(sql);
        if( !query.exec()){
            errInfo = query.lastError().text();
            return false;
        }
        while(query.next())
        {
            tmpValue = query.value("TmpFiled").toString();
        }
        query.clear();
    }
    closeDataBase(connectionName);
    return true;
}
bool CMBWatchUserDb::exsitSql(QString sql, bool &bExsit, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    bExsit = false;
    QString connectionName;
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery query(db);
        query.prepare(sql);
        if( !query.exec()){
            errInfo = query.lastError().text();
            return false;
        }
        // 获取大小
        int initialPos = query.at();
        int nCount = 0;
        if (query.last())
            nCount = query.at() + 1;
        else
            nCount = 0;
        query.seek(initialPos);
        // end 获取大小
        if( nCount >= 1 ){
            bExsit = true;
        }
        query.clear();
    }
    closeDataBase(connectionName);
    return true;
}
bool CMBWatchUserDb::init(QString path,QString &errInfo)
{
    m_path = path;
    m_pMgr->removeAll();
    if( !queryDB(errInfo) )
        return false;
    return true;
}
bool CMBWatchUserDb::loadDB(QSqlQuery &query)
{
    while(query.next())
    {
        QString login     = query.value("CN_S_LOGIN").toString();
        QString svrID     = query.value("CN_S_SERVER_ID").toString();
        QString backupDir = query.value("CN_S_BACKUP_DIR").toString();
        QString svrPath   = query.value("CN_S_SERVER_PATH").toString();
        QString isLogin   = query.value("CN_S_ISLOGIN").toString();
        CMBWatchUser *pUser = new CMBWatchUser();
        pUser->setLogin(login);
        pUser->setSvrID(svrID);
        pUser->setBackupDir(backupDir);
        pUser->setSvrPath(svrPath);
        pUser->setIsLogin(isLogin);
        if( !m_pMgr->add(pUser) ){
            delete pUser;
            pUser = NULL;
        }
    }
    return true;
}
bool CMBWatchUserDb::queryDB(QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    QString connectionName,sql;
    sql = QString("select * from %1 where CN_S_ISLOGIN='Y'").arg(m_tableName);
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery query(db);
        query.prepare(sql);
        if( !query.exec()){
            errInfo = query.lastError().text();
            return false;
        }
        if(!loadDB(query))
            return false;
        query.clear();
    }
    closeDataBase(connectionName);
    return true;
}