diff --git a/xyylMCWEACSystem/SqlCore.cpp b/xyylMCWEACSystem/SqlCore.cpp new file mode 100644 index 0000000..3f159bc --- /dev/null +++ b/xyylMCWEACSystem/SqlCore.cpp @@ -0,0 +1,202 @@ +#include "CSqlCore.h" +#include +#include +#include +#include +#include "global_log.h" +using namespace UiFramework; +QMap> CSqlCore::mutexMap; + +QString CSqlCore::msDriverName; +QString CSqlCore::msPasswd; +QString CSqlCore::msUserName; +QString CSqlCore::msDBFile; +QMutex CSqlCore::mWriteMutex; +void CSqlCore::init(QString sDriver, QString sUser, QString sPasswd, QString sDBFile) +{ + QByteArray base64User(sUser.toUtf8()); + QByteArray base64Passwd(sPasswd.toUtf8()); + msDriverName = sDriver; + msUserName = base64User.toBase64(); + msPasswd = base64Passwd.toBase64(); + msDBFile = sDBFile; +} + +bool CSqlCore::setKey(QString sDriver,QString sConnect, QString sUser, QString sPasswd, QString sdbFile) +{ + bool ok = false; + QSqlDatabase dataBase = QSqlDatabase::addDatabase(sDriver, sConnect); + if (QFile::exists(sdbFile)) + { + + QByteArray base64User(sUser.toUtf8()); + QByteArray base64Passwd(sPasswd.toUtf8()); + dataBase.setUserName(base64User.toBase64()); + dataBase.setDatabaseName(sdbFile);// + dataBase.setPassword(base64Passwd.toBase64()); + if (sPasswd.isEmpty()) + { + dataBase.setConnectOptions("QSQLITE_REMOVE_KEY"); + logInfo() << QString::fromLocal8Bit("解密") << endl; + } + else + { + dataBase.setConnectOptions("QSQLITE_CREATE_KEY"); + logInfo() << QString::fromLocal8Bit("加密") << endl; + } + if (!dataBase.open()) + { + logError() << QString::fromLocal8Bit("密码错误") << endl; + ok = false; + } + else + { + ok = true; + } + } + dataBase.close(); + return ok; +} + +bool CSqlCore::updateKey(QString NewsPasswd, QString oldPasswd) +{ + bool ok = false; + getSqlDataBase().setPassword(oldPasswd); + getSqlDataBase().setConnectOptions("QSQLITE_UPDATE_KEY=" + NewsPasswd); + ok = getSqlDataBase().open(); + if (!ok) + { + logError() << "updatePasswd: " << getSqlDataBase().lastError().driverText(); + ok = false; + } + return ok; +} + +bool CSqlCore::execute(QString sql ) +{ + QMutexLocker lockTemp(&mWriteMutex); + QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//文件名 + 线程 + //qDebug() << "execute:" << connName << endl; + QSqlDatabase t = getSqlDataBase( ); + mutexMap[msDBFile][connName]->lock(); + if (!t.isOpen()) + t.open(msUserName,msPasswd); + QSqlQuery sqlQuery(t); + bool flag = sqlQuery.exec(sql); + if (!flag) + { + logError() << connName << sqlQuery.lastError().text() << endl; + } + mutexMap[msDBFile][connName]->unlock(); + return flag; +} + + + + +QSharedPointer CSqlCore::select(QString sql) +{ + //QMutexLocker lockTemp(&mWriteMutex); + QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//文件名 + 线程 + //qDebug() << "select:" << connName << endl; + QSqlDatabase t = getSqlDataBase(); + + mutexMap[msDBFile][connName]->lock(); + if (!t.isOpen()) + t.open(msUserName,msPasswd); + // QSqlQuery *sqlQuery = new QSqlQuery(t); + //QSharedPointer sqlQuery = new QSharedPointer; + QSharedPointer sqlQuery = QSharedPointer(new QSqlQuery(t)); + if (!sqlQuery->exec(sql)) { + logError() << "CSqlCore::select() sql = " << sql << sqlQuery->lastError().text() << " failed!" << endl; + } + + mutexMap[msDBFile][connName]->unlock(); + return sqlQuery; +} + +QSharedPointer CSqlCore::select(QString sql, bool& ok) +{ + //QMutexLocker lockTemp(&mWriteMutex); + QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//文件名 + 线程 + //qDebug() << "select:" << connName << endl; + QSqlDatabase t = getSqlDataBase(); + + mutexMap[msDBFile][connName]->lock(); + if (!t.isOpen()) + t.open(msUserName, msPasswd); + // QSqlQuery *sqlQuery = new QSqlQuery(t); + //QSharedPointer sqlQuery = new QSharedPointer; + QSharedPointer sqlQuery = QSharedPointer(new QSqlQuery(t)); + ok = sqlQuery->exec(sql); + if (!ok) + { + logError() << "CSqlCore::select() sql = " << sql << sqlQuery->lastError().text() << " failed!" << endl; + } + + mutexMap[msDBFile][connName]->unlock(); + return sqlQuery; +} + +void CSqlCore::destroyConn() +{ + QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//文件名 + 线程 + //qDebug() << "destroyConn:" << connName << endl; + if (!QSqlDatabase::contains( connName)) + return; + QSqlDatabase t = QSqlDatabase::database(connName); + if (t.isOpen()) + t.close(); + QSqlDatabase::removeDatabase( connName); + delete mutexMap[msDBFile][connName]; + mutexMap[msDBFile].remove(connName); + if (mutexMap[msDBFile].keys().length() == 0) + mutexMap.remove(msDBFile); +} + +void CSqlCore::destroyOneDBConn() +{ + // foreach (QString i, mutexMap[msDBFile].keys()) + { + destroyConn(); + } +} + +void CSqlCore::destroyAllDBConn() +{ + // foreach (QString i, mutexMap.keys()) + // { + destroyOneDBConn(); + // } +} + +QSqlDatabase CSqlCore::getSqlDataBase() +{ + QString connName = QString("%1(%2)").arg(msDBFile).arg(QString::number(qint64(QThread::currentThread()), 16));//文件名 + 线程 + if (!QSqlDatabase::contains(connName)) + { + QSqlDatabase database = QSqlDatabase::addDatabase(msDriverName, connName); + database.setDatabaseName(msDBFile); + database.setUserName(msUserName); + database.setPassword(msPasswd); + if (!mutexMap.contains(msDBFile)) + { + QMap tMap; + mutexMap.insert(msDBFile, tMap); + } + if (database.isOpen() || database.open()) + { + QSqlQuery query(database); + query.exec("PRAGMA journal_mode=WAL;"); // 设置WAL模式 + query.finish(); + query.clear(); + } + else + { + logWarning() << "DB open failed! " << database.lastError().text() << endl; + } + QMutex *mutex = new QMutex(); + mutexMap[msDBFile].insert(connName, mutex); + } + return QSqlDatabase::database( connName); +} diff --git a/xyylMCWEACSystem/SqlCore.h b/xyylMCWEACSystem/SqlCore.h new file mode 100644 index 0000000..7f414a5 --- /dev/null +++ b/xyylMCWEACSystem/SqlCore.h @@ -0,0 +1,57 @@ +锘#pragma execution_character_set("utf-8") +#ifndef CSqlCore_H +#define CSqlCore_H +/* + \author: zym + \brief : + \version 1.0 + \note + \CopyRight:zym +*/ +#include +#include +#include +#include +#include +#include + +//鏁版嵁搴撴搷浣滅被 +//浣跨敤QMutex 瀵 杩炴帴 鍔犻攣锛岄傜敤浜庡绾跨▼ +//浣嗗缓璁粡甯稿悓鏃舵搷浣滃悓涓鏁版嵁搴撶殑绾跨▼ 浣跨敤 涓嶅悓鐨勮繛鎺ュ悕锛屽洜涓洪攣鐨勪簰鏂ョ瓑寰呬細澧炲ぇ澶勭悊鏃堕棿 +//锛堟暟鎹簱涓疄闄呯殑杩炴帴鍚嶆槸"dbFile+connName"锛屼絾鑻ヤ娇鐢ㄦ绫荤殑灏佽鍒欎笉鐢ㄥ叧蹇冨疄闄呯殑杩炴帴鍚嶏級 +namespace UiFramework +{ + class CSqlCore : public QObject + { + Q_OBJECT + public: + //浠onnName杩炴帴瀵规暟鎹簱dbFile鎵цsql璇彞锛岃sql璇彞鏃犺繑鍥炲硷紝鍑芥暟杩斿洖鎵ц鎴愬姛/澶辫触 + //鑻ヨ杩炴帴宸插瓨鍦ㄥ垯鍒欒幏鍙栵紝涓嶅瓨鍦ㄥ垯鍒涘缓鍐嶈幏鍙 + static bool execute(QString sql); + static QSharedPointerselect(QString sql, bool& ok); + //浠onnName杩炴帴瀵规暟鎹簱dbFile鎵цsql璇彞锛岃sql璇彞鏈夎繑鍥炲硷紝閫氳繃QSqlQuery::next()涓嶆柇鑾峰彇鏁版嵁琛 + //鑻ヨ杩炴帴宸插瓨鍦ㄥ垯鍒欒幏鍙栵紝涓嶅瓨鍦ㄥ垯鍒涘缓鍐嶈幏鍙 + static QSharedPointerselect(QString sql); + //鍒犻櫎db鏂囦欢dbFile鐨刢onnName杩炴帴鍜屽叾瀵瑰簲鐨勯攣 + static void destroyConn(); + //鍒犻櫎db鏂囦欢dbFile鐨勬墍鏈夎繛鎺ュ拰閿 + static void destroyOneDBConn(); + //鍒犻櫎鎵鏈塪b鏂囦欢鐨勬墍鏈夎繛鎺ュ拰閿 + static void destroyAllDBConn(); + static QSqlDatabase getSqlDataBase(); + static void init(QString sDriver, QString sUser, QString sPasswd, QString sDBFile); + static bool setKey(QString sDriver, QString sConnect, QString sUser, QString sPasswd, QString sdbFile); + static bool updateKey(QString NewsPasswd, QString oldPasswd); + private: + //鑾峰彇瀵逛簬dbFile鏂囦欢鐨勬暟鎹簱杩炴帴connName + //鏈夊垯杩斿洖锛屾病鏈夊垯鍒涘缓鍐嶈繑鍥 + //鍚屾閿侊紝澶栧眰key鏄痙b鏂囦欢鍚嶏紝鍐呭眰key鏄db鏂囦欢鐨勬暟鎹簱杩炴帴鍚 + static QMap> mutexMap; + static QString msDriverName; + static QString msUserName; + static QString msPasswd; + static QString msDBFile; + static QMutex mWriteMutex; + }; +} +#endif // CSqlCore_H diff --git a/xyylMCWEACSystem/parametersettingswidget.cpp b/xyylMCWEACSystem/parametersettingswidget.cpp new file mode 100644 index 0000000..e69de29 diff --git a/xyylMCWEACSystem/parametersettingswidget.h b/xyylMCWEACSystem/parametersettingswidget.h new file mode 100644 index 0000000..2f56b43 --- /dev/null +++ b/xyylMCWEACSystem/parametersettingswidget.h @@ -0,0 +1,4 @@ +#ifndef PARAMETERSETTINGSWIDGET_H +#define PARAMETERSETTINGSWIDGET_H + +#endif // PARAMETERSETTINGSWIDGET_H