• tars 常用类用法总结一


    一.配置类——taf::TC_Config

    定义配置文件的类,与配置操作相关的类。

    1.主要成员函数及数据成员

    class TC_Config
    {
    public:
         TC_Config();   //构造函数
         TC_Config(const TC_Config &tc);   //构造函数
         TC_Config&    operator=(const TC_Config &tc);    //复制构造函数
         void     parseFile(const string& sFileName);      //解析文件
         void     parseString(const string& buffer);       //解析字符串
         string   operator[](const string &sName);       //通过下标获取值
         string   get(const string &sName, const string &sDefault="") const;    //获取值
         bool     getDomainMap(const string &path, map<string, string> &m) const;   //获取域下面的参数值对
         map<string, string> getDomainMap(const string &path) const;      //获取域下面的参数值对,不存则返回空map. 
         vector<string>      getDomainKey(const string &path) const;         //获取域下面的所有key, 按照文件的行顺序返回.
         bool     getDomainVector(const string &path, vector<string> &v) const;  //获取域下面的子域. 
         vector<string>      getDomainVector(const string &path) const;     //获取域下面的子域, 不存在则返回空vector
         string   tostr() const;       //转换成配置文件的字符串格式. 
         
    protected:
         void parse(istream &is);      //输入流
         TC_ConfigDomain *newTcConfigDomain(const string& sName);     //生成子域
         TC_ConfigDomain *searchTcConfigDomain(const vector<string>& domains);      //搜索域
         const TC_ConfigDomain *searchTcConfigDomain(const vector<string>& domains) const;
     
     protected:
         TC_ConfigDomain _root;
    };
    
    
    • 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

    2.基本使用

    <Main> 
        <Domain> 
         Name = Value 
        </Domain> 
        <Domain1> 
         Name = Value 
        </Domain1> 
    </Main>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    如图 < Main > 可以看成是一个域,而 < Domain >< Domain1 > 可以理解为是 < Main > 的子域。
    当我们要使用 TC_Config 类对象进行操作时,需要先执行 parseFile()parseString() 函数。然后,如果我们要取得某个子域下的全部配置,就可以执行 getDomainMap() 函数,注意传入的路径 path 要写成 域/子域 的形式。比如你要取得子域 < Domain > 下的配置,那么就应该这样 getDomainMap(“Main/Domain”) 调用函数。

    二.Mysql 操作类——taf::TC_Mysql

    初始化 Mysql 配置,连接数据库等。

    1.主要成员函数及数据成员

    class TC_Mysql 
     {
     public:
         TC_Mysql();   //构造函数
         TC_Mysql(const string& sHost, const string& sUser = "", const string& sPasswd = "", const string& sDatabase = "", const string &sCharSet = "", int port = 0, int iFlag = 0);   //构造函数
         TC_Mysql(const TC_DBConf& tcDBConf);  //构造函数
         ~TC_Mysql();  //析构函数
         
         void init(const string& sHost, const string& sUser  = "", const string& sPasswd  = "", const string& sDatabase = "", const string &sCharSet = "", int port = 0, int iFlag = 0);   //初始化
         void init(const TC_DBConf& tcDBConf);    //初始化
         void connect();     //连接数据库
         void disconnect();   //断开数据库连接
    
         MysqlData queryRecord(const string& sSql);      //查询数据
         size_t updateRecord(const string &sTableName, const map<string, pair<FT, string> > &mpColumns, const string &sCondition);      //更新记录
         size_t insertRecord(const string &sTableName, const map<string, pair<FT, string> > &mpColumns);    //插入记录
         size_t replaceRecord(const string &sTableName, const map<string, pair<FT, string> > &mpColumns);   //替换记录
         size_t deleteRecord(const string &sTableName, const string &sCondition = "");     //删除记录
     
     private:
         MYSQL               *_pstMql;      //数据库指针
         TC_DBConf           _dbConf;       //数据库配置
         bool                _bConnected;   //数据库是否连接标志
         string              _sLastSql;     //追后执行的 sql 语句
    };
    
    • 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

    2.基本使用

    首先需要实例化出一个类对象,再通过该对象调用 init() 函数初始化 Mysql 配置,然后再调用 connect() 函数连接上 Mysql 后即可进行查询,修改,新增,删除等操作。

    数据库初始化可以通过一个个传入参数来完成,也能通过传入 TC_DBConf 结构来完成初始化。

    TC_DBConf
    struct TC_DBConf
    {
         string _host;    //主机地址
         string _user;    //用户名
         string _password;   //密码
         string _database;   //数据库名
         string _charset;    //字符集
         int _port;          //端口号
         int _flag;          //客户端标识
     
         void loadFromMap(const map<string, string> &mpParam)
         {
             map<string, string> mpTmp = mpParam;
     
             _host        = mpTmp["dbhost"];
             _user        = mpTmp["dbuser"];
             _password    = mpTmp["dbpass"];
             _database    = mpTmp["dbname"];
             _charset     = mpTmp["charset"];
             _port        = atoi(mpTmp["dbport"].c_str());
             _flag        = 0;
         }
     };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    看一个例子:

    TC_Mysql      _propmysql;    //数据库操作类对象
    TC_Config     conf;         //配置操作类对象
    TC_DBConf     queryRspDbConf;    //数据库配置结构体
    
    conf.parseFile(ServerConfig::BasePath + ServerConfig::ServerName + ".conf");     //解析配置文件,并分为不同的域
    map<string, string> rspdb = conf.getDomainMap("/config/querypropertydb");        //将配置文件数据转化为 map 数据存储 
    queryRspDbConf.loadFromMap(rspdb);     //将数据转入 TC_DBConf 结构
    
    _propmysql.init(queryRspDbConf);   //使用配置文件初始化数据库
    _propmysql.connect();              //连接数据库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    三.Mysql 数据类——taf::TC_Mysql::MysqlData

    主要用于接收,存储从 Mysql 读取出来的数据。

    1.主要成员函数及数据成员

    class MysqlData
    {
    public:
        vector<map<string, string> >& data();   //返回从 Mysql 查询到的数据
        size_t size();     //返回查询到的数据总条数
        MysqlRecord operator[](size_t i);  //重载 [] 运算符,通过下标获取数据
    
    protected:
        vector<map<string, string> > _data;    //存储 Mysql 数据,其中存储在 Map 中的数据是以 <字段,值> 的形式存储
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.基本使用

    首先创建一个 TC_Mysql::MysqlData 类对象 Data,再调用 TC_Mysql 类对象的 queryRecord() 方法。传入要执行的 sql 语句,并把返回结果赋值给 Data 就行了。

    Data = mysql.queryRecord(sql);  
    
    • 1

    四.网络端口类——taf::TC_Endpoint

    用于表示一个网络端口,执行网络端口的一些基本操作。

    1.主要成员函数及数据成员

    class TC_Endpoint
    {
    public:
         void    setHost(const string& host);  //设置ip 
         string  getHost() const;            //获取ip 
         void    setPort(int port);            //设置ip
         int     getPort() const;               //得到端口
         void    setTimeout(int timeout);      //设置超时时间 
         int     getTimeout() const;            //获取超时时间
         bool    isTcp() const;                //是否是TCP, 否则则为UDP  
         void    setTcp(bool bTcp);            //设置为TCP或UDP 
         int     getGrid() const;               //获取路由状态 
         void    setGrid(int grid);            //设置路由状态
         bool    isUnixLocal() const;          //是否是本地套接字
         void    parse(const string &desc);    //字符串形式的端口
          
    protected:
         std::string _host;             //ip
         int         _port;             //端口
         int         _timeout;          //超时时间
         int         _istcp;            //TCP UDP 标志
         int         _grid;             //路由状态
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2.基本使用

    通过 OBJ 名获取对应服务器 IP

    string obj;                //obj 是某个服务名方法
    vector<string> IPs;        //存储 ip
    vector<TC_Endpoint> vtHost;       //网络端口数组
    int iRet = EndPointHelper::getEndPoint(obj, vtHost);      //获取该 obj 对应的 TC_Endpoint,可能不止一个,所以用数组存储
    for(auto& ep : vtHost)     //通过 getHost 方法获取 ip
        IPs.push_back(ep.getHost());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    快速导入mysql较大的SQL文件
    LQ0212 蚂蚁感冒【序列处理】
    Vue 和 jQuery 两者之间的区别是什么?
    腾讯云轻量2核4G5M服务器双11优惠价166元一年可选三年
    分析 SpringBoot 底层机制【Tomcat 启动分析 +Spring 容器初始化 +Tomcat 如何关联 Spring 容器 】
    CMT2380F32模块开发5-CLK例程
    【预测模型-BP分类】基于人工蜂群算法优化BP神经网络实现数据分类附matlab代码
    模板(详解)
    MySQL中数据库、数据表的基本操作
    IDEA全局 查找/搜索 代码里所有 中文/汉字 或指定的 中文/汉字
  • 原文地址:https://blog.csdn.net/weixin_45738899/article/details/125717425