240717班级,工业化控制系统,煤矿相关行业,昆仑系统
1
wangky
2024-11-04 4b032971d376b063480e53842045561f7c9b399b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "MysqlConn.h"
#include <regex>
// ³õʼ»¯Á¬½Ó
MysqlConn::MysqlConn() {
    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;
}
 
// ÊÍ·Å×ÊÔ´
MysqlConn::~MysqlConn() {
    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::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;
}
 
// µÃµ½½á¹û¼¯
bool MysqlConn::getResult() {
    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);
}
 
// ÊÂÎñ²Ù×÷
bool MysqlConn::transaction() {
    return mysql_autocommit(mysql_ ,false );
}
 
// Ìá½»ÊÂÎñ
bool MysqlConn::commit() {
    return mysql_commit(mysql_);
}
 
// ÊÂÎñ»Ø¹ö
bool MysqlConn::rollback() {
    return mysql_rollback(mysql_);
}
 
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( );   // ¶àÉÙºÁÃë
}
// °²È«Ð£ÑéʵÏÖ£¬ÕâÀï¼òµ¥Ê¹ÓÃÕýÔò±í´ïʽÅжÏÊÇ·ñ°üº¬Î£ÏÕ×Ö·û
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;
    }
}