240717班级,工业化控制系统,煤矿相关行业,昆仑系统
1
wangky
2024-11-05 88b2854c40c76750372ae83b862acbb5f5b11776
1
5个文件已修改
2个文件已添加
181 ■■■■■ 已修改文件
Server/王琨元/code/ConnectionPool.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/王琨元/code/ConnectionPool.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/王琨元/code/MysqlConn.cpp 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/王琨元/code/MysqlConn.h 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/王琨元/log/~$模板_王琨元_1104.doc 补丁 | 查看 | 原始文档 | blame | 历史
Server/王琨元/log/日志模板_王琨元_1104.doc 补丁 | 查看 | 原始文档 | blame | 历史
表.docx 补丁 | 查看 | 原始文档 | blame | 历史
Server/ÍõçûÔª/code/ConnectionPool.cpp
@@ -1,3 +1,4 @@
#include "stdafx.h"
#include "ConnectionPool.h"
#include <fstream>
@@ -30,7 +31,7 @@
bool ConnectionPool::parseJsonFile() {
    std::ifstream ifs("dbconf.json");
    /*std::ifstream ifs("dbconf.json");
    Reader rd;
    Value root;
    rd.parse(ifs, root);
@@ -45,7 +46,7 @@
        max_del_time = root["maxDleTime"].asInt();
        m_timeout = root["timeout"].asInt();
        return true;
    }
    }*/
    return false;
}
Server/ÍõçûÔª/code/ConnectionPool.h
@@ -3,11 +3,11 @@
#include <queue>
#include <mutex>
#include <condition_variable>
#include <json/json.h>
//#include <json/json.h>
#include "MysqlConn.h"
using namespace Json;
//using namespace Json;
class ConnectionPool
{
Server/ÍõçûÔª/code/MysqlConn.cpp
@@ -1,115 +1,144 @@
#include "stdafx.h"
#include "MysqlConn.h"
#include <regex>
// åˆå§‹åŒ–连接
MysqlConn::MysqlConn() {
    mysql_ = mysql_init( mysql_ );
    // è®¾ç½®å­—符集
    if( mysql_ )   mysql_set_character_set(mysql_ , "gbk");
    mysql_ = mysql_init(mysql_);
    // è®¾ç½®å­—符集
    if (mysql_) mysql_set_character_set(mysql_, "gbk");
}
// è¿žæŽ¥æ•°æ®åº“
bool MysqlConn::connect( std::string ip, std::string userName, std::string passwd, std::string db, int port ) {
    mysql_ = mysql_real_connect(mysql_, ip.c_str(), userName.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0);
    if (!mysql_) {
        return false;
    }
    return true;
bool MysqlConn::connect(std::string ip, std::string userName, std::string passwd, std::string db, int port) {
    mysql_ = mysql_real_connect(mysql_, ip.c_str(), userName.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0);
    if (!mysql_) {
        return false;
    }
    return true;
}
// é‡Šæ”¾èµ„源
MysqlConn::~MysqlConn() {
    if (mysql_) {
        mysql_close(mysql_);
        mysql_ = nullptr;
    }
    freeRes();
    if (mysql_) {
        mysql_close(mysql_);
        mysql_ = nullptr;
    }
    freeRes();
}
// æ›´æ–°æ•°æ®
bool MysqlConn::update( std::string sql ) {
    if (!isSqlSafe(sql))
    {
        return false;
    }
    int ret = mysql_query( mysql_ , sql.c_str());
    if( ret != 0 ){
        return false;
    }
    return true;
bool MysqlConn::update(std::string sql) {
    // å‚数化查询优化后的安全检查
    MYSQL_STMT* stmt = mysql_stmt_init(mysql_);
    if (!stmt) {
        return false;
    }
    if (mysql_stmt_prepare(stmt, sql.c_str(), sql.length())) {
        mysql_stmt_close(stmt);
        return false;
    }
    int paramCount = mysql_stmt_param_count(stmt);
    if (paramCount > 0) {
        // å¦‚果有参数,需要进行参数绑定等操作,这里暂不实现
        mysql_stmt_close(stmt);
        return false;
    }
    if (mysql_stmt_execute(stmt)) {
        mysql_stmt_close(stmt);
        return false;
    }
    mysql_stmt_close(stmt);
    return true;
}
// æŸ¥è¯¢æ•°æ®åº“
bool MysqlConn::query(std::string sql) {
    freeRes( );
    if (!isSqlSafe(sql))
    {
        return false;
    }
    int ret = mysql_query(mysql_, sql.c_str());
    if (ret != 0)   return false;
    // èŽ·å–æŸ¥è¯¢ç»“æžœ
    res_ = mysql_store_result(mysql_);
    if (!res_)   return false;
    return true;
    freeRes();
    // å‚数化查询优化后的安全检查
    MYSQL_STMT* stmt = mysql_stmt_init(mysql_);
    if (!stmt) {
        return false;
    }
    if (mysql_stmt_prepare(stmt, sql.c_str(), sql.length())) {
        mysql_stmt_close(stmt);
        return false;
    }
    int paramCount = mysql_stmt_param_count(stmt);
    if (paramCount > 0) {
        // å¦‚果有参数,需要进行参数绑定等操作,这里暂不实现
        mysql_stmt_close(stmt);
        return false;
    }
    if (mysql_stmt_execute(stmt)) {
        mysql_stmt_close(stmt);
        return false;
    }
    res_ = mysql_stmt_result_metadata(stmt);
    if (!res_) {
        mysql_stmt_close(stmt);
        return false;
    }
    mysql_stmt_close(stmt);
    return true;
}
// å¾—到结果集
bool MysqlConn::getResult() {
    if (res_) {
        row_ = mysql_fetch_row(res_);
        if(row_)  return true;
    }
    return false;
    if (res_) {
        row_ = mysql_fetch_row(res_);
        if (row_) return true;
    }
    return false;
}
// èŽ·å–ç»“æžœé›†çš„å­—æ®µ
std::string MysqlConn::getField( int index ) {
    int cols = mysql_num_fields(res_);
    if ( index >= cols || index < 0 )   return std::string("");
    char* value = row_[index];
    unsigned long  len = mysql_fetch_lengths(res_)[index];
    return  std::string(value, len);
std::string MysqlConn::getField(int index) {
    int cols = mysql_num_fields(res_);
    if (index >= cols || index < 0) return std::string("");
    char* value = row_[index];
    unsigned long len = mysql_fetch_lengths(res_)[index];
    return std::string(value, len);
}
// äº‹åŠ¡æ“ä½œ
bool MysqlConn::transaction() {
    return mysql_autocommit(mysql_ ,false );
    return mysql_autocommit(mysql_, false);
}
// æäº¤äº‹åŠ¡
bool MysqlConn::commit() {
    return mysql_commit(mysql_);
    return mysql_commit(mysql_);
}
// äº‹åŠ¡å›žæ»š
bool MysqlConn::rollback() {
    return mysql_rollback(mysql_);
    return mysql_rollback(mysql_);
}
void MysqlConn::refreshActiveTime()
{
    activeTime_  = std::chrono::steady_clock::now();
void MysqlConn::refreshActiveTime() {
    activeTime_ = std::chrono::steady_clock::now();
}
long long MysqlConn::getActiveTime()
{
     // çº³ç±³
     std::chrono::nanoseconds  nased =  std::chrono::steady_clock::now() - activeTime_;
     // è½¬æ¢æˆæ¯«ç±³
     std::chrono::microseconds millsed = std::chrono::duration_cast<std::chrono::microseconds>( nased );
     return millsed.count( );   // å¤šå°‘毫秒
long long MysqlConn::getActiveTime() {
    // çº³ç±³
    std::chrono::nanoseconds nased = std::chrono::steady_clock::now() - activeTime_;
    // è½¬æ¢æˆæ¯«ç±³
    std::chrono::microseconds millsed = std::chrono::duration_cast<std::chrono::microseconds>(nased);
    return millsed.count();   // å¤šå°‘毫秒
}
// å®‰å…¨æ ¡éªŒå®žçŽ°ï¼Œè¿™é‡Œç®€å•ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åˆ¤æ–­æ˜¯å¦åŒ…å«å±é™©å­—ç¬¦
bool MysqlConn::isSqlSafe(const std::string& sql)
{
    std::regex dangerousPattern(".*(['\";\\-+=]).*");
    return!std::regex_search(sql, dangerousPattern);
bool MysqlConn::isSqlSafe(const std::string& sql) {
    std::regex dangerousPattern(".*(['\";\\-+=]).*");
    return!std::regex_search(sql, dangerousPattern);
}
void MysqlConn::freeRes() {
    if (res_) {
        mysql_free_result(res_);
        res_ = nullptr;
    }
    if (res_) {
        mysql_free_result(res_);
        res_ = nullptr;
    }
}
Server/ÍõçûÔª/code/MysqlConn.h
@@ -2,10 +2,13 @@
#include <string>
#include <WinSock2.h>
#include <mysql.h>
//#include <mysql.h>
#include "MySQL/include/mysql.h"
#include <string.h>
#include <chrono>
#pragma comment(lib,"./MySQL/lib/libmysql.lib")
class MysqlConn
{
public:
Server/ÍõçûÔª/log/~$Ä£°å_ÍõçûÔª_1104.doc
Binary files differ
Server/ÍõçûÔª/log/ÈÕ־ģ°å_ÍõçûÔª_1104.doc
Binary files differ
±í.docx
Binary files differ